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/

10-11 03:25