通过传递的指针在静态方法中访问非静态成员
Accessing non static members inside static method via passed pointer
不是实际代码,而是表示:
我需要从我的一个成员函数中启动线程,然后这样做:
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_cast
和reinterpret_cast
的利弊。由于您将void*
用作中间类型,因此可以使用它们。
相关文章:
- 如何从C 的朋友类访问私有静态方法
- 为什么从静态方法访问非静态方法是糟糕的设计
- 无法访问静态方法(C )
- 测试项目在访问私有静态方法时遇到问题,尽管我从未直接调用过它
- 如何在C++的静态方法中访问非静态引用
- 通过传递的指针在静态方法中访问非静态成员
- "undefined reference"从静态方法访问的模板类的静态成员
- 类静态方法访问其静态数据成员
- 从静态方法访问非静态成员的工作示例
- C++ Lambda:访问 lambda 中的静态方法会导致错误'this was not captured for this lambda function'
- 通过非静态方法访问静态成员
- 如何从静态方法(信号处理程序)访问类成员和方法
- 无法访问公共静态方法
- 该"Named Constructor Idiom"似乎与静态方法无法访问非静态成员函数的规则相矛盾。有什么解释吗?
- 访问其他类中的静态方法和静态布尔值
- 从静态方法访问对象的属性
- 从c++类外部访问私有静态方法
- 从c++的静态方法中访问#defined变量
- 如何在c++中使用ref类从线程中访问非静态方法
- 静态方法可以访问同一类的私有方法吗?