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|

私は多くの方法を試しましたが、すべて失敗しました...どうすればいいですか?

4

3 に答える 3

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、me​​mfunction があるため、この仕事により適しています

于 2013-08-16T05:50:02.030 に答える
3

通常のメンバー ポインターの場合、ポインター型のメンバーである型を宣言する必要があります。

int main()
{
    void * (A::*fp)(void *);
    fp = &A::f;
}
于 2013-08-16T05:50:22.387 に答える
1
 std::function<void *( A&, void *)> fp = &A::f;
于 2013-08-16T06:02:15.360 に答える