我想用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的反射那样的效果吗?
|
|