Давайте предположим, что иерархия классов ниже.
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
, - перебрать все элементы, выяснить тип, использовать его соответственно ,
- Очистите контейнер, затем цикл начнется заново.