How would I make a std::vector
that contains a default-constructed instance of all the types contained in a std::variant
?
using TaskVariant = std::variant<TypeA, TypeB, TypeC>;
std::vector<TaskVariant> variants;
// I'd like to do this in a loop
variants.push_back(TypeA());
variants.push_back(TypeB());
variants.push_back(TypeC());
1.Solution: You can convert variant to tuple and then use C++17 std::apply:
EDIT:
2.Solution: Using make_index_sequence, variant_alternative_t and variant_size_v (all C++17) (thanks to @s d by pointing out to variant_alternative_t, but I have modified example by using make_index_sequence instead of recursion):