我需要将一些成员函数指针转换为void*指针(因为我需要将它们推送到Lua堆栈,但问题不是Lua相关).
我是这样做的union.但是当我将成员函数指针转换为a void*并再次返回然后尝试使用该类的实例调用指针时,this指针会被破坏.扼杀,这个问题不会发生,如果我将void*指针转换回C风格的函数指针,并带有指向类的指针作为它的第一个参数.
这是一段演示问题的代码:
#include <iostream>
using namespace std;
class test
{
int a;
public:
void tellSomething ()
{
cout << "this: " << this << endl;
cout << "referencing member variable..." << endl;
cout << a << endl;
}
};
int main ()
{
union
{
void *ptr;
void (test::*func) ();
} conv1, conv2;
union
{
void *ptr;
void (*func) (test*);
} conv3;
test &t = *new test ();
cout …Run Code Online (Sandbox Code Playgroud)