C++ 将此调用传递给函数typedef

C++ 将此调用传递给函数typedef,c++,typedef,C++,Typedef,我甚至不知道如何恰当地使用这个词,但我会尽力用代码解释它: typedef void( *ExampleFn )( PVOID p1, PVOID p2, PVOID p3 ); struct Example { void ExampleFunction( PVOID p1, PVOID p2, PVOID p3 ) { // do something with Example's members } }; Example example; Examp

我甚至不知道如何恰当地使用这个词,但我会尽力用代码解释它:

typedef void( *ExampleFn )( PVOID p1, PVOID p2, PVOID p3 );

struct Example
{
    void ExampleFunction( PVOID p1, PVOID p2, PVOID p3 )
    {
        // do something with Example's members
    }
};

Example example;
ExampleFn exampleFn = example.ExampleFunction;
所以,我得到了这个错误:

Error C2440 '=': cannot convert from 'void (__thiscall Example::* )(PVOID,PVOID,PVOID)' to 'ExampleFn'
我理解这个问题,Example::Example函数是一个_uthis调用,ExampleFn不是,但是我该怎么做呢


如何使一个示例对象中有一个ExampleFn类函数,可以使用该对象的成员?

您需要正确定义函数指针。它是一个成员函数指针,因此需要如下所示:

typedef void(Example::*ExampleFn )( PVOID p1, PVOID p2, PVOID p3 );
这个调用只是成员函数的调用约定,所以它是自动设置的


您定义了一个指向普通函数的指针,因此它不起作用。这实际上与通话转换无关。

假设我无法更改该示例fn。我无法控制如何定义它。然后你不能将成员函数绑定到它,它应该是普通函数或静态成员函数。这就是我想的,我只是想知道是否有办法做到这一点。不是真的,因为方法需要this points作为附加参数。您可以考虑使用STD::STAT::BIN或lambda函数。假设您可以使用一个<代码> pWATION/COD>参数来传递用户定义的数据,标记的副本的答案提供了一种方法。