VS2013编译错误:指向成员的非静态数据成员初始化

时间:2013-10-21 08:43:52

标签: c++ c++11 visual-studio-2013

此代码在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

1 个答案:

答案 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);
}