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

Accessing non static members inside static method via passed pointer

本文关键字:静态方法 访问 静态成员 指针      更新时间:2023-10-16

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

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

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

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

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

我遇到一个错误,说 void*不是对象类型的指针,我认为 args将被输入到类型myClass 的实例中。p>但是,我该怎么做?

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

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

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

您可以从static成员函数访问类的private成员功能。因此,您可以使用以下方式访问类的private成员:

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

另一个问题及其答案讨论了使用static_castreinterpret_cast的利弊。由于您将void*用作中间类型,因此可以使用它们。