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;
}

 

 

posted on 2017-01-11 14:26  abelian  阅读(124)  评论(0)    收藏  举报