2013-08-16 63 views
0

代碼:如何創建一個指向成員函數的函數指針?

struct A 
{ 
    void* f(void *) 
    { 

    } 
}; 
int main() 
{ 
    void * (*fp)(void *); 
    fp = &A::f; 
} 

編譯:

|12|error: cannot convert 'void* (A::*)(void*)' to 'void* (*)(void*)' in assignment| 

我已經嘗試了很多方法,但都失敗了......那怎麼辦?

+0

退房['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['的std :: bind']( http://en.cppreference.com/w/cpp/utility/functional/bind)。 –

回答

3

對於普通成員指針,你需要聲明它是對指針類型成員的類型更適合這份工作;

int main() 
{ 
    void * (A::*fp)(void *); 
    fp = &A::f; 
} 
3

不要使用函數指針使用std::mem_fn

auto func = std::mem_fn(&A::f); 

如果你真的想使用函數指針(你不這樣做),你必須做到這一點。

void * (A::*func)(void*); 
func = &A::f; 

IMO這是醜陋,難讀,少維護


您也可以使用std::function這樣。

A a; 
std::function<void*(const A &, void*)> f_add_display = &Foo::print_add; 

mem_fn,因爲你有一個memfunction

1
std::function<void *(A&, void *)> fp = &A::f; 
相關問題