免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3424 | 回复: 0
打印 上一主题 下一主题

请教C++ TR1中 function对成员函数指针的包装 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-21 14:46 |只看该作者 |倒序浏览
这两天换了Ubuntu装了Archlinux,发现GCC已经到了4.3。于是去GNU上看了看4.3的Changelog,发现已经实现了C++ TR1 ,并初步实现了C++0x。

初步看看了网上C++ TR1的介绍tuple smart_ptr function都是很便利的工具
下面我写了点function的测试代码
#include <tr1/array>
#include <tr1/tuple>
#include <tr1/memory>
#include <tr1/functional>
#include <vector>
#include <string>
#include <iostream>

class A {
public:
    std::string m_value;
    A() :
        m_value("Defult") {
    }
    ~A() {
        fprintf(stdout,"---------------\nDestruction\nAddress:%08X\nValue:%s\n---------------\n",this,m_value.c_str());
    }
    void setValue(const std::string& op){m_value=op;}
    void setValue(){m_value="New Value";}
    std::string getValue(){return m_value;}
};

typedef std::tr1::function<void(A& p)> sampleFunction;
typedef std::tr1::shared_ptr<A> ptrA;
typedef void(A::*A_fun1)();

void foo(A& p) {
    p.m_value="Hello world!";
}


int main() {
   
    ptrA p0(new A);
   
    sampleFunction func1(foo);
    A_fun1 fp=&A::setValue;
    sampleFunction func2(fp);
    //sampleFunction func3(&A::setValue);

    std::cout<<p0->getValue()<<'\n';
   
    func1(*p0);
    std::cout<<p0->getValue()<<'\n';
   
    func2(*p0);
    std::cout<<p0->getValue()<<'\n';
   
    return 0;
}



基本实现了我的想法
不过从例子中可以看到如果成员函数被重载,比如有两个setValue ,只能用比较繁琐的代码 需要定义成员函数指针 。
而如果setValue只有一个函数,没有其他重载函数,则被注释掉的代码可以编译。
问一下这个问题是不是只能这样做  我看了 C++ Primer和《C++ Function Objects in TR1》也没想出什么好的写法
真实怎么看怎么讨厌
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP