A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我想用boost的bind实现类似于java的反射的效果:
class A

{

    int a;

public:   

    A(int aa) : a(aa) {}      

    int getA() {

        return a;

    }

    void setA(int b) {

        a = b;

    }

};

int main() {

    A a1(1);

    boost::function<void(A,int)> set = boost::bind(&A::setA, _1, _2);

    boost::function<int(A)> get = boost::bind(&A::getA, _1);

    set(a1, 99);

    cout << "a1.a = " << get(a1) << endl;

}

但是这个程序输出 a1.a = 1,调用set(a1, 99)没有改变a1的值

我加了打印语句以后发现调用get和set时各有两次A的copy constructor的调用

也就是说get和set都作用于a1的拷贝身上

请问bind有可能实现java的反射那样的效果吗?

点评

实现方面估计会很蛋疼,你怎么反射exe?另外dll貌似反射的代价也特别大,在一个如果你可以反射出来的话,破解也就更容易了  发表于 2012-7-2 11:29

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马