有一个类模板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 {}
答案 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。