Some code will help making sense:
#include <variant>
#include <vector>
#include <string>
using MyType = std::variant<int, float, string>;
using ContainerOfMyType = std::vector<MyType>;
using MySuperType = std::variant<MyType, ContainerOfMyType>;
Instead of having MySuperType being a std::variant of another std::variant and a std::vector of std::variant, I would like to have all types unpacked into a single std::variant deriving from MyType.
So the expected result in that case would be (written manually):
using MySuperType = std::variant<int, float, string,
std::vector<int>, std::vector<float>,
std::vector<string>>;
Is it possible? How can I achieve this?
CodePudding user response:
I would like to declare a new
varianttype that contains all these base types, plusvectorof each of these base types.
Template partial specialization should be enough
#include <variant>
#include <vector>
template<class Var>
struct MySuper;
template<class... Args>
struct MySuper<std::variant<Args...>> {
using type = std::variant<Args..., std::vector<Args>...>;
};
