如何在不传递类实例的情况下从静态成员函数调用非静态成员函数

Har*_*han 4 c++ static struct class

我需要从同一个类的静态成员函数调用非静态成员函数.静态函数是一个回调函数.它只能接收作为数据的void,尽管我传递了char*.所以我不能直接为回调提供类实例.我可以将结构而不是char传递给回调函数.任何人都可以提供例如在静态成员函数中使用非静态成员函数的代码.并使用静态成员函数中的结构来使用类的实例来调用非静态成员函数?

Hen*_*rik 5

通常这样的回调看起来像这样:

void Callback( void* data)
{
    CMyClass *myClassInstance = static_cast<CMyClass *>(data);
    myClassInstance->MyInstanceMethod();
}
Run Code Online (Sandbox Code Playgroud)

当然,您需要确保数据指向您的类的实例.例如

CMyClass* data = new CMyClass();
FunctionCallingMyCallback( data, &Callback);
delete data;
Run Code Online (Sandbox Code Playgroud)

现在,如果我理解正确,你还需要传递一个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);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您可以修改CMyClass的定义,请将所有必要的数据放在类成员中,以便您可以像第一个示例中那样使用回调.