我正在尝试让这样的东西工作:
int main()
{
class Base
{
public:
Base() = default;
virtual void print() = 0;
void CallThread()
{
std::thread(&Base::print, *this);
};
};
class derived1 : public Base
{
public:
derived1() = default;
void print() { printf("this is derived1\n"); }
};
class derived2 : public Base
{
public:
derived2() = default;
void print() { printf("this is derived2\n"); }
};
Base* ptr;
ptr = new derived1();
ptr->CallThread();
return 0;
}
我想要的结果是:
this is derived1.
问题是它甚至无法编译。我正在使用 VisualStudio 2013。
错误是:
Error 2 error C3640: 'main::Base::[thunk]: __thiscall
main'::
2'::Base::`vcall'{0,{flat}}' }'' : a referenced or virtual member function of a local class must be defined
有什么想法可以实现吗?
编辑:澄清一下,我想在线程中做的事情更复杂,这只是我程序结构的一个例子(所以 lambda 对我来说不是个好主意)
最佳答案
您的代码很好,除了两点:
std::thread(&Base::print, *this);
应该是:
std::thread(&Base::print, this).join(); // join & no asterisk
关于c++ - 使用 std::thread 从派生类调用重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25568825/