我需要从同一个类的静态成员函数调用非静态成员函数。 静态函数是一个回调。它只能接收 void 作为数据,尽管我传递了一个 char*。所以我不能直接向回调提供类实例。我可以将结构而不是 char 传递给回调函数。谁能给出在静态成员函数中使用非静态成员函数的代码。并使用静态成员函数中的结构体来调用类的实例来调用非静态成员函数?
最佳答案
通常这样的回调看起来像这样:
void Callback( void* data)
{
CMyClass *myClassInstance = static_cast<CMyClass *>(data);
myClassInstance->MyInstanceMethod();
}
当然,您需要确保数据指向您的类的一个实例。例如
CMyClass* data = new CMyClass();
FunctionCallingMyCallback( data, &Callback);
delete data;
现在,如果我理解正确的话,您还需要传递一个 char*。 您可以将两者都包装在一个结构中,然后像这样在回调中将其解包:
MyStruct* data = new MyStruct();
data->PtrToMyClass = new CMyClass();
data->MyCharPtr = "test";
FunctionCallingMyCallback( data, &Callback);
delete data->PtrToMyClass;
delete data;
void Callback( void* data)
{
MyStruct *myStructInstance = static_cast<MyStruct *>(data);
CMyClass *myClassInstance = myStructInstance->PtrToMyClass;
char * myData = myStructInstance->MyCharPtr;
myClassInstance->MyInstanceMethod(myData);
}
或者,如果您可以修改 CMyClass 的定义,将所有必要的数据放入类成员中,以便您可以像第一个示例那样使用回调。
关于c++ - 如何在不传递类实例的情况下从静态成员函数调用非静态成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6894977/