推导模板参数的模板参数

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 的第一个模板参数(如果存在),否则替换失败。