Как упоминалось в некоторых комментариях, сохранение переменных различных типов в std::vector
может быть не очень хорошей идеей, и на самом деле, если вам нужно сделать это, есть вероятность, что у этих типов есть что-то общее, что вы можете найтиболее подходящие подходы для достижения ваших целей, такие как создание std::vector<std::unique_ptr<Base_Type>>
.
. Однако то, что вы пытались сделать, все еще возможно несколько иным способом, используя std::any
.
template <typename T>
struct B
{
T member;
};
// ...
std::vector<std::any> v;
B<int> bi {123};
B<char> bc {'@'};
B<std::string> bs {"I am a string"};
v.push_back(bi);
v.push_back(bc);
v.push_back(bs);
// Go through vector. You will have to check for the type and
// cast it appropriately before doing anything useful.
for (auto x : v) {
if (x.type() == typeid(B<int>))
std::cout << std::any_cast<B<int>>(x).member << std::endl;
else if (/* ... */)
// ...
}
// ...
* 1008.* Другим вариантом может быть
std::vector
из
std::variant
с, как объяснил Витторио.