如何获取模板类的参数
How take param of the template template class
我有一个类似Type<Param>
的类型。如何在c++11中检索参数?
可能是这样的:
// 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>
template<class Type>
struct GetParam;
template<template<typename ...> class Tmp, typename T1, typename ...Types>
struct GetParam<Tmp<T1, Types...>> {
typedef T1 type;
};
然而,传递给GetParam
的类模板特化只能有类型模板参数。例如,你不能通过std::array
。做一个完全通用的GetParam
是不可能的,因为您必须登记每一个可能的模板参数列表的变化,基本上有无限多。
看起来tr2可能在类型特征中有一个类型列表。在g++-4.7中,你可以这样写:
template<class Type>
struct GetParam2;
template<template<typename ...> class Tmpl, typename Type, typename ...Types>
struct GetParam2<Tmpl<Type, Types...>>
{
typedef typename std::tr2::typelist<Type, Types...> tlist;
typedef typename tlist::first::type type;
typedef typename tlist::rest::type types;
};
typedef GetParam2<std::vector<double>>::type dbl2; // double
static_assert(std::is_same<dbl, dbl2>::value, "Ouch");
typedef GetParam2<std::list<double>>::type dbl2; // double
typedef GetParam2<std::vector<std::list<double>>>::type listdbl2; // std::list<double>
static_assert(std::is_same<listdbl, listdbl2>::value, "Ouch");
typedef GetParam2<std::array<double, 3>>::type arrdbl; // std::list<double>
一切正常,但最后一行数组。也许我用错了。
和johannesschaub -litb的答案差不多,但是如果有库的支持就好了。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 有没有办法在从编译器获取参数时避免预处理器宏?
- 如何从参数中获取函数签名?
- 如何使用可变参数模板获取参数的变量号及其大小C++
- 如何从参数包获取指向对象的指针
- 根据参数类型获取匹配过载
- 如何在C++中接收任何类型的函数参数并获取函数内传递变量的类型?
- 在函数参数中获取 ) 预期的错误
- 函数从模板参数中获取字段值,而不是直接访问以允许对相同信息使用不同的名称
- 从参数包获取类型定义
- 从模板参数中获取可变参数
- 将 lambda 参数类型获取到模板参数包中
- 为什么在解析 main() 参数时获取地址值
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 从模板模板方法参数中获取类型
- Win32 c++ DLL函数在参数中获取垃圾值
- 如何从外部参数中获取立体图像中的点
- C++for循环逻辑:从cmdline参数中获取字符串后中断
- Lua从参数中获取函数