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|
我已經嘗試了很多方法,但都失敗了......那怎麼辦?
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|
我已經嘗試了很多方法,但都失敗了......那怎麼辦?
對於普通成員指針,你需要聲明它是對指針類型成員的類型更適合這份工作;
int main()
{
void * (A::*fp)(void *);
fp = &A::f;
}
不要使用函數指針使用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
std::function<void *(A&, void *)> fp = &A::f;
退房['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['的std :: bind']( http://en.cppreference.com/w/cpp/utility/functional/bind)。 –