使用派生的 class 的成员函数启动线程

Start thread with derived class's member function

类似于这个问题:Start thread with member function and this one: std::thread calling method of class

但是我有以下几点:

#include <thread>
#include <iostream>
class myAbstractClass {
public:
  virtual void myFunction() = 0;//abstract class
}

class myFirstClass : public myAbstractClass {
public:
  void myFunction() { std::cout << "First class here";}
}

class mySecondClass : public myAbstractClass {
public:
  void myFunction() { std::cout << "Second class here";}
}

然后我必须在新线程中从不同的地方调用 myFunction(),但以下代码无法编译(我想不出其他任何尝试):

public void callMemberFunctionInThread(myAbstractClass& myInstance) {
  std::thread myThread (&myAbstractClass::myFunction, myInstance);
  //supposed to call myInstance.myFunction() on myThread
}

通过std::ref(myInstance)。请注意,std::thread 构造函数将复制传递给它的参数(请参阅 here),并且您不能复制 myAbstractClass.

(然后,所有这些仍然有效,因为 std::thread 功能是根据 std::invoke 描述的,它解开 std::ref 获得的 std::reference_wrapper 并调用指向其成员函数的指针。参见 here).