通过传入的指针访问静态方法内的非静态成员

不是实际的代码,而是一种表示:

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

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_castreinterpret_cast优缺点。 由于您使用void*作为中间类型,因此您可以使用其中任何一种。

链接地址: http://www.djcxy.com/p/17301.html

上一篇: Accessing non static members inside static method via passed pointer

下一篇: Memory static function vs member function