3

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

1 回答 1

-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);
}
于 2013-10-21T09:43:42.830 回答