Сохранение типов во время компиляции
Я пытаюсь реализовать обертку над чем-то подобным:
template <typename ...Type>
struct Types
{
template <typename NewType>
constexpr auto addType()
{
return Types<Type..., NewType>();
}
template<size_t n>
constexpr auto getType()
{
return std::get<n+1>(types);
}
static constexpr std::variant<std::monostate, Type...> types {};
};
То есть моя цель, чтоб в зависимости от вызовов функции addType(), я в итоге как-то получил доступ к std::variant (std::tuple тоже устроит), для которого я смогу вызвать getType(). По идее же все типы, которые я добавляю, известны во время компиляции? Есть вариант как-то реализовать нечто подобное?
Вариант хранить список std::type_info мне не подходит.