通过传递的指针访问静态方法内部的非静态成员
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_cast
和 reinterpret_cast
的优缺点。由于您使用 void*
作为中间类型,因此您可以使用它们中的任何一个。
不是实际代码,而是表示:
我需要从我的一个成员函数启动一个线程,我是这样做的:
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_cast
和 reinterpret_cast
的优缺点。由于您使用 void*
作为中间类型,因此您可以使用它们中的任何一个。