Как я могу использовать шаблонный класс как типовое имя другого класса? - PullRequest
2 голосов
/ 18 марта 2020

У меня есть шаблон класса A:

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

Теперь я хочу получить производный шаблон класса B:

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

Есть ли какой-нибудь метод, который я могу реализовать это?

1 Ответ

1 голос
/ 18 марта 2020

Вы должны определить T как параметр шаблона шаблона , например,

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

Затем вы можете указать другой шаблон класса, например 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;
};
...