c++ - 模板和继承

标签 c++ templates inheritance

如果我有一个基类及其层次结构:

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/

相关文章:

c++ - "a member template of a class"在 C++ 标准中指的是什么?

django - Django模板:测试变量是否在列表或字典中

C++11模板函数接受多个模板别名

c# - 将 Collection<Derived> 转换为 Collection<Base>

c++ - AddressSanitizer GCC 4.8 双重释放错误

c++ - 浮点值比较失败

c++ - 如何在不使用 'friend' 的情况下允许另一个类创建但允许继承?

jquery - CSS继承问题。请帮助CSS。

c++ - fwrite 输出字符串不正确

c++ - LNK2005 - 在 .hpp 文件中声明函数时出错