c – 将指向成员函数的指针转换为普通指针
发布时间:2020-12-16 10:40:23 所属栏目:百科 来源:网络整理
导读:目前我有一类此类,简化为了简化: class MyClass { public: MyClass(); void* someFunc(void* param);} 现在我需要调用这种类型的函数(不是任何类的成员,我遗憾地无法更改)但是我还需要调用它: void secondFunc(int a,int b,void *(*pCallback)(void*)); 现
目前我有一类此类,简化为了简化:
class MyClass { public: MyClass(); void* someFunc(void* param); } 现在我需要调用这种类型的函数(不是任何类的成员,我遗憾地无法更改)但是我还需要调用它: void secondFunc(int a,int b,void *(*pCallback)(void*)); 现在我需要传递一个实例的someFunc的地址. 一个不起作用的样本: MyClass demoInstance; // some other calls secondFunc( 1,2,demoInstance::someFunc() ); 我也试过像以下演员: (void* (*)(void*)) demoInstance::someFunc; reinterpret_cast<(void* (*)(void*))>(demoInstance::someFunc); 如何使用类的成员函数作为参数调用此函数,以便可以将其用作回调? 任何想法或评论都表示赞赏.感谢致敬 解决方法
C函数和C成员函数之间的区别在于C函数使用cdecl调用约定,而成员函数使用thiscall调用约定(你甚至不能使用它们的地址!).
据我所知,你实际上希望secondFunc()调用特定类的实例的成员函数(让我们称之为).那么,特定类的所有实例的成员函数的地址是相同的.为了将指针传递给对象,您需要一个侧面通道.在这种情况下,它可以是静态变量.或者,如果您需要MT支持,则必须使用线程本地存储(TLS), 这需要每个SomeFunc类型成员进行一次回调,但无论如何你都需要一个调度程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |