class classe (){
public:
int key;
static void *funct(void *context){
printf("Output: %d, ", key);
}
void Go(){
classe c = static_cast<this>(context); //<- This doesn't work, Context of this-> goes here
pthread_create(&t, NULL, &classe::funct, c);
}
};
int main(){
classe c;
c.key = 15;
c.Go();
c.key = 18;
c.Go();
}
输出应为
Output: 15, Output: 18,
,事情是获取this
的上下文引发错误。有人知道如何解决这个问题吗?
最佳答案
我可以看到您的代码有一些问题:
首先,static_cast<>
需要<>
中的类型,而this
就像变量一样(而不是类型)。 this
的类型是classe*
中的classe
(指向classe
对象的指针)。
其次,在context
中没有可用的classe:Go()
。该名称有一个classe::fuct()
参数,但是在要使用它的地方不可用。
第三,pthread_create()
假定有一个自由函数(或一个静态成员函数),而您提供了一个类成员函数(classe::funct
)。类成员函数需要一个对象来工作(类似于隐式参数== this
)。您也没有在t
中定义的classe::Go()
可以传递给pthread_create()
您可以尝试:
static void *funct(void *key){ // funct is now a free function, all data is provided to it
printf("Output: %d, ", *static_cast<int*>(key));
}
class classe ()
{
public:
int key;
void Go(){
pthread t;
pthread_create(&t, NULL, funct, &key); // pass (address of) key to funct
}
};
int main(){
classe c;
c.key = 15;
c.Go();
c.key = 18;
c.Go();
}
关于c++ - 在类内部获取“this”的上下文并分配给类指针TheClass *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10038167/