我如何使用模板 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;
};
我有模板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;
};