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

标签 c++ class static struct

我需要从同一个类的静态成员函数调用非静态成员函数。 静态函数是一个回调。它只能接收 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/

相关文章:

c++ - CUDA 7.5 实验性 __host__ __device__ lambda

c++ - 检测到堆损坏 : private array

c# - 从类型类列表中删除重复项

java - 垃圾收集器是否处理 java 中的静态变量或方法?

javascript - 如何在 Angular2 中保护我的代码?

c# - 静态构造函数会降低访问静态方法的性能吗?

c++ - 使用堆栈的队列

c++ - 慢链接阶段

c++ - 将值添加到单独链接的哈希表 C++

javascript - 如何在 JavaScript 中命名匿名对象?