通过传递的指针访问静态方法内部的非静态成员

Accessing non static members inside static method via passed pointer

不是实际代码,而是表示:

我需要从我的一个成员函数启动一个线程,我是这样做的:

return_val = pthread_create(&myThread, NULL, myStaticMethod, (void*)(this));

i) 我将 this 作为参数传递,因为静态方法不允许访问非静态成员,并且因为我有非静态方法和成员可以在内部访问静态方法。 这样对吗?或者,还有其他选择吗?

myStaticMethod(void* args)    
{
    args->myPublicMethod(); //Is this legal and valid?

    args->myPrivateMember;   //Is this legal and valid?
}

我收到一条错误消息说 void* 不是指向对象类型的指针,我认为 args 将被类型转换为 myClass 类型的实例.

但是,我该怎么做呢?

args->myPublicMethod(); //Is this legal and valid?

没有。那既不合法也无效。但是,您可以使用:

reinterpret_cast<MyClass*>(args)->myPublicMethod();

您可以从 static 成员函数访问 class 的 private 成员函数。因此,您可以使用以下方法访问 class 的 private 成员:

reinterpret_cast<MyClass*>(args)->myPrivateMember;

Another SO question 及其答案讨论了使用 static_castreinterpret_cast 的优缺点。由于您使用 void* 作为中间类型,因此您可以使用它们中的任何一个。