コード:
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|
私は多くの方法を試しましたが、すべて失敗しました...どうすればいいですか?
関数ポインタを使用しないでください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 があるため、この仕事により適しています
通常のメンバー ポインターの場合、ポインター型のメンバーである型を宣言する必要があります。
int main()
{
void * (A::*fp)(void *);
fp = &A::f;
}
std::function<void *( A&, void *)> fp = &A::f;