如果我有一个基类及其层次结构:
class BaseClass {
}
class DerivedClass : public BaseClass {
}
还有一个模板类:
template <class T> struct TemplatedClass {
}
我怎样才能做到这一点? :
// 1:
void doSomething(TemplatedClass<BaseClass *> const &t);
// 2:
std::vector<TemplatedClass<BaseClass *>> v;
TemplatedClass<DerivedClass *> a;
// Doesn't compile
doSomething(a);
// Doesn't compile
v.push_back(a);
最佳答案
您也可以让您的模板类具有层次结构。但是,您需要指定基数:
template <typename...>
struct TC;
template <>
struct TC<> {
virtual ~TC() {}
};
template <typename T, typename... B>
struct TC
: TC<B...> {
// ...
};
对于继承的可变参数,这应该允许您指定模板之间的关系以模仿底层的继承层次结构。例如:
TC<Base>* d = new TC<Derived, Base>(/*...*/);
关于c++ - 模板和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19860767/