我如何使用模板 class 作为另一个 class 的类型名称?

how can i use a template class as another class's typename?

我有模板classA:

template<typename T>
class A {
  void test(T & t) {
  }
};

现在我想要一个衍生模板class B:

template <typename T>
class B {
  B() : a(new T<int>), b(new T<char>) {}
  T* a;
  T* b;
};

有什么方法可以实现吗?

您应该将 T 定义为 template template parameter,例如

template<template<typename> class T>
class B {
  B() : a(new T<int>), b(new T<char>) {}
  T<int>* a;
  T<char>* b;
};

然后你可以指定其他class模板如A作为模板参数如B<A> b;.


顺便说一句:从 C++17 开始,您也可以将关键字 typename 用于模板模板参数声明。即

template<template<typename> typename T>
class B {
  B() : a(new T<int>), b(new T<char>) {}
  T<int>* a;
  T<char>* b;
};