Вы можете сохранить вид, чтобы упростить его, используя параметр шаблона * variadi c . Изменение second
на
template<template<typename...> typename class_instance, typename... Params>
class second {
public:
template <std::size_t I>
using param_t = std::tuple_element_t<I, std::tuple<Params...>>;
param_t<1> foo;
};
Вы можете использовать его как
int main() {
second<first, int, double, float, long, long long> foo{};
foo.foo = 42.1;
std::cout << foo.foo;
}
, который выводит
42.1
, как вы можете видеть в этом прямом эфире пример .
Да, теперь вы используете число, которое может не стоить того, но оно удаляет большую часть плиты котла. Если вы действительно хотите, вы можете даже добавить enum
к second
и использовать его как
template<template<typename...> typename class_instance, typename... Params>
class second {
public:
enum { one, of, very, many, tparams };
template <std::size_t I>
using param_t = std::tuple_element_t<I, std::tuple<Params...>>;
param_t<of> foo;
};