gpt4 book ai didi

c++ - 从父类调用派生成员函数

转载 作者:行者123 更新时间:2023-12-02 18:34:15 29 4
gpt4 key购买 nike

我需要在线程成员函数中调用B::f()。我得到的是“纯虚方法调用”。我怎样才能做到这一点?

我假设所有这一切的发生都是因为 A 初始值设定项列表中的 &A::thread_f,我在其中显式命名了范围。

class A {
protected:
std::thread _thread;

A() : _thread(&A::thread_f, this) { }

~A() {
_thread.join();
}

virtual void f() = 0;

void thread_f() {
f();
}
};

class B : public A {
protected:
void f() override {
std::cout << "B::f()" << std::endl;
}
};

最佳答案

正如@Evg所说,通过启动一个线程,A ctor 调用成员函数 fB施工前B .

解决方案是在B构造完成后启动线程。

#include<iostream>
#include<vector>
#include <stdlib.h>
#include <thread>

using namespace std;
class A {
public:
~A() {
_thread.join();
}
void start()
{
_thread = std::thread(&A::thread_f, this);
}
protected:
std::thread _thread;
A()
{
}

virtual void f() = 0;
void thread_f() {
f();
}
};

class B : public A {
protected:
void f() override
{
std::cout << "B::f()" << std::endl;
}
};

void main() {
A *pA=new B;
pA->start();
delete pA;
}

关于c++ - 从父类调用派生成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69009468/

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