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

标签 c++ multithreading static this

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

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

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 类型的实例。。 p>

但是,我该怎么做呢?

最佳答案

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

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

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

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

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

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

关于c++ - 通过传递的指针访问静态方法内部的非静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010393/

相关文章:

c++ 各种数据类型的可变数组?

javascript - 通常只执行一次 javascript 的有效方法(通过 cookie)?

c++ - 为什么我不能前向声明静态函数?

c++ - boost::dijkstra_shortest_paths 覆盖内部图权重?

c++ - 以这种方式访问​​受 Base 保护的成员是否安全?

c++ - C 中的 Doxygen 错误

c++ - 使用 future 的 C++ 在运行时出现段错误

ios - 如何处理3个不同但同时进行的异步调用

multithreading - 在Boost线程上调用抽象函数,不会在interrupt_point中断

c - 在 C 中使用静态变量的最佳实践