Мне кажется, что в современной стандартной библиотеке C ++ ближайшее, что вам нужно, это std::tuple
.
Если проблема в том, что std::tuple
хранит значения перечисленных типов (поэтому, я полагаю,может быть проблема создания экземпляра объекта этого типа) легко написать инстанцируемый объект, который обертывает std::tuple
using
без создания экземпляра самого std::tuple
.
Я имею в виду ... учитывая такую оболочку
template <typename ... Ts>
struct wrapTuple
{
using type = std::tuple<Ts...>;
template <std::size_t N>
using element = std::tuple_element_t<N, type>;
static constexpr auto length { std::tuple_size_v<type> };
};
вы можете написать следующие строки без создания экземпляра оболочки
using int_types = wrapTuple<int, long, short, char>;
std::cout << int_types::length << ' '
<< typeid(int_types::element<2u>).name() << std::endl;
, но вы также можете создать его без создания экземпляра std::tuple
int_types it;
std::cout << it.length << ' '
<< typeid(decltype(it)::element<2u>).name() << std::endl;