此代码在VS2013中不起作用,但适用于GCC(http://ideone.com/WgmlT2)。谁是对的,有一些解决方法吗?
struct A
{
void(A::*fn)() = &A::do_work; // C2276: '&' : illegal operation on bound member function expression
void do_work() { cout << "Hello, world!"; }
};
int main()
{
A a;
(a.*(a.fn))();
}
我需要像宏路由器这样的东西,所以构造函数初始化列表中的初始化是不合适的。
#define ROUTE(url, ...) \
route_inserter_base route_inserter_##url = make_route_inserter(*this, #url, &this_t::url##_action); \
mystream url##_action
ROUTES_BEGIN(app)
ROUTE(getdata)(int idx) {
return data[idx];
}
ROUTES_END
答案 0 :(得分:-1)
不太确定我完全理解你的问题,但是对于成员函数指针,你可以尝试:
struct A;
typedef void (A::*pClassFun)();
struct A
{
void do_work() { cout << "Hello, world!"; }
void call_do_work(pClassFun fun)
{
(this->*fun)();
}
};
int main()
{
A a;
a.call_do_work(&A::do_work);
}