2013-10-21 46 views
3

此代碼在VS2013中不起作用,但在GCC中起作用(http://ideone.com/WgmlT2)。誰是對的,是否有一些解決方法?VS2013編譯錯誤:通過指向成員的非靜態數據成員初始化

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

這既g ++以及鐺++工程。我懷疑它在vs2013(或一個bug)中還不被支持。 – Jarod42

回答

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