推导模板参数的模板参数
Deduce template parameter's template parameter
有一个 class 模板 A
,其模板参数采用模板 class。
template <typename T> class A {}
template <typename T> class B {}
int main()
{
A<B<int>>();
return 0;
}
class模板能否A
推导出其模板参数(B
int)的模板参数(int)?
或者有其他方法可以解决这个问题吗?例如,
template <typename T<typename U>> class A {}
您所描述的是模板模板:
template< template<typename> class T > class A {};
注意 T 之前的 class 必须是 class,而不是类型名称。
您可以将 A
设为模板模板:
template <template <typename> class T, typename Inner>
class A<T<Inner>> {};
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
的第一个模板参数(如果存在),否则替换失败。
有一个 class 模板 A
,其模板参数采用模板 class。
template <typename T> class A {}
template <typename T> class B {}
int main()
{
A<B<int>>();
return 0;
}
class模板能否A
推导出其模板参数(B
int)的模板参数(int)?
或者有其他方法可以解决这个问题吗?例如,
template <typename T<typename U>> class A {}
您所描述的是模板模板:
template< template<typename> class T > class A {};
注意 T 之前的 class 必须是 class,而不是类型名称。
您可以将 A
设为模板模板:
template <template <typename> class T, typename Inner>
class A<T<Inner>> {};
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
的第一个模板参数(如果存在),否则替换失败。