让我们假设下面的这个类层次结构。
class BaseClass {
public:
int x;
}
class SubClass1 : public BaseClass {
public:
double y;
}
class SubClass2 : public BaseClass {
public:
float z;
}
...
我想制作这些类的异构容器。由于子类是从基类派生的,所以我可以做这样的事情:
std::vector<BaseClass*> container1;
但由于 C++17 我也可以std::variant
这样使用:
std::vector<std::variant<SubClass1, SubClass2, ...>> container2;
使用其中一种的优点/缺点是什么?我对表演也很感兴趣。
考虑到我将按 对容器进行排序x
,并且我还需要能够找出元素的确切类型。我要去
- 装满容器,
- 排序
x
, - 遍历所有元素,找出类型,相应地使用它,
- 清除容器,然后循环重新开始。