gpt4 book ai didi

c++ - 使用 std::thread 从派生类调用重写方法

转载 作者:太空狗 更新时间:2023-10-29 19:52:27 24 4
gpt4 key购买 nike

我正在尝试让这样的东西工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com