【发布时间】:2020-11-14 08:16:41
【问题描述】:
我想用我的类创建一个树形结构,这样我就可以递归地更新一个对象和它的子对象。
我的第一个想法是在超类中添加一个变体列表,以便每个后续派生类也可以存储一个子类列表(从而形成树结构)。我尝试实现类似以下代码的内容,但在尝试将子类 A 和 B 添加到变体时不断出错。
是否可以在超类中存储子类?这甚至是正确的方法吗?
如果有修复代码的方法或其他获取功能的方法,请告诉我!
#include <iostream>
#include <list>
#include <variant>
class SubClassA;
class SubClassB;
//-------------------------------------
class SuperClass {
public:
std::list<std::variant<SuperClass, SubClassA, SubClassB>> children;
void update() {
// do X
updateChildren();
}
protected:
void updateChildren() {
for (auto &varObj : children) {
std::visit([](auto& child) {child.update(); }, varObject);
}
}
};
//-------------------------------------
class SubClassA : public SuperClass {
public:
void update() {
// do Y
updateChildren();
}
};
//-------------------------------------
class SubClassB : public SuperClass {
public:
void update() {
// do Z
updateChildren();
}
};
【问题讨论】:
标签: c++ inheritance c++17 variant incomplete-type