通过传入的指针访问静态方法内的非静态成员
不是实际的代码,而是一种表示:
我需要从我的一个成员函数启动一个线程,我这样做:
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 *不是一个指向对象类型的指针 ,我认为这个参数是被绑定到myClass类型的一个实例中的 。
但是,我该怎么做?
args->myPublicMethod(); //Is this legal and valid?
不,这既不合法也不合法。 但是,您可以使用:
reinterpret_cast<MyClass*>(args)->myPublicMethod();
您可以从static
成员函数访问类的private
成员函数。 因此,您可以使用以下方式访问该课程的private
成员:
reinterpret_cast<MyClass*>(args)->myPrivateMember;
另一个SO问题及其答案讨论了使用static_cast
和reinterpret_cast
优缺点。 由于您使用void*
作为中间类型,因此您可以使用其中任何一种。
上一篇: Accessing non static members inside static method via passed pointer