如何获取模板模板类的参数

Den*_*hin 2 c++ templates metaprogramming c++11

我有类似的类型Type<Param>.我如何在c ++ 11中检索Param?

可能是这样的:

// I know it's not correct but it conveys the idea very well
template
<
   template <class Param> class Type 
>
struct GetParam
{
   typedef Param Result;
};

// e.g.
typedef GetParam<std::vector<double>>::Result X; // must return double
typedef GetParam<std::list<double>>::Result X; // double
typedef GetParam<std::vector<std::list<double>>::Result X; // std::list<double>
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 5

template<class Type>
struct GetParam;

template<template<typename ...> class Tmp, typename T1, typename ...Types>
struct GetParam<Tmp<T1, Types...>> {
  typedef T1 type;
};
Run Code Online (Sandbox Code Playgroud)

但是,传递给的类模板特化GetParam只能有类型模板参数.所以你不能通过std::array例子.不可能完全通用GetParam,因为你必须征集每个可能的模板参数列表种类,并且基本上有无限多.