Ответ 1
Просто напишите это:
const int n = sizeof...(T); //you may use `constexpr` instead of `const`
Обратите внимание, что n
является константным выражением (известно во время компиляции), что означает, что вы можете использовать его там, где требуется постоянное выражение, например:
std::array<int, n> a; //array of n elements
std::array<int, 2*n> b; //array of (2*n) elements
auto middle = std::get<n/2>(tupleInstance);
Обратите внимание, что если вы хотите вычислить агрегированный размер упакованных типов (в отличие от количества типов в пакете), то вы должны сделать что-то вроде этого:
template<std::size_t ...>
struct add_all : std::integral_constant< std::size_t,0 > {};
template<std::size_t X, std::size_t ... Xs>
struct add_all<X,Xs...> :
std::integral_constant< std::size_t, X + add_all<Xs...>::value > {};
то сделайте следующее:
constexpr auto size = add_all< sizeof(T)... >::value;
Надеюсь, что это поможет.