Deduce模板参数的模板参数

时间:2015-02-18 11:27:10

标签: c++ templates

有一个类模板A,它为模板参数提供模板类。

template <typename T> class A {}
template <typename T> class B {}
int main()
{
    A<B<int>>();
    return 0;
}

类模板A可以推断出它的模板参数(B int)&#39的模板参数(int)吗?

还是有其他方法可以解决这个问题吗?例如,

template <typename T<typename U>> class A {}

3 个答案:

答案 0 :(得分:4)

template<class>struct inner{};
template<template<class...>class Z, class T, class...Ts>
struct inner<Z<T, Ts...>>{
  using type=T;
};
template<class Z>
using inner_t=typename inner<Z>::type;

inner_t<X>X的第一个模板参数(如果存在),否则替换失败。

答案 1 :(得分:3)

您可以将A设为模板模板:

template <template <typename> class T, typename Inner> 
class A<T<Inner>> {};

答案 2 :(得分:1)

您所描述的是模板模板:

template< template<typename> class T > class A {};

请注意T之前的课程必须是 class ,而不是typename。