variadic variadic template template parameters
http://stackoverflow.com/questions/38611823/variadic-variadic-template-template-parameters-parameters
variadic variadic template template parameters
include <array>
template <typename T, std::size_t ... Args>
struct testS
{ };
void foo ()
{ /* terminal iteration */ }
template <template <typename, std::size_t...> class Pack,
typename T, std::size_t ... Args, typename ... Packs>
void foo (const Pack<T, Args...> pack0, Packs ... packs) // 是不是Pack中的T, 和Args... 必须在前面声明中体现出来
{
// do something with pack0
foo(packs...);
}
int main()
{
foo(testS<int>{}, std::array<long, 5U>{}, testS<char, 7U, 9U, 11U>{});
return 0;
}
------------------------------------------------------------------------------------------------------------
#include <array>
#include <tuple>
using namespace std;
template <typename T>
struct extract_args;
template <template <typename, size_t...> class Pack, typename T, size_t... Args>
struct extract_args<Pack<T,Args...>>
{
using type = T;
using args = std::index_sequence<Args...>;
};
template<typename... Ts>
void foo(const Ts&... packs)
{
using all_ts = std::tuple<typename extract_args<Ts>::type...>;
all_ts a;
}
template <typename T, std::size_t ... Args>
struct testS
{ };
int main()
{
foo(testS<int>{}, std::array<long, 5U>{}, testS<char, 7U, 9U, 11U>{});
return 0;
}