c++ - C++ 中的继承和模板

标签 c++ templates inheritance

我在继承和模板方面遇到以下问题:

class Base {};
class Deriv : public Base {};

template <class T> class X{};

void f(X<Base>& inst) {}

int main()
{
  X<Base> xb;
  f(xb);
  X<Deriv> xd;
  f(xd);
  return 0;
}

程序无法编译,因为X<Base>之间没有关系。和X<Deriv> 。尽管如此,我认为应该可以做 X<Base> 可以做的一切事情。还有X<Deriv> 。除了复制 f 的函数体之外,我还能做些什么吗?到一个新功能void g(X<Deriv>& inst)

最佳答案

您可以继续使用模板:

template<class T>
void f(X<T>& inst) {}

适用于 X<Base>X<Derived> .

编译器可能复制代码(如果它不够智能),但您不必这样做。

关于c++ - C++ 中的继承和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045827/

相关文章:

c++ - 方法头部的模板化模板参数名称无效

c++ shared_ptr继承内存问题 "Bad deallocation"

C++ 模板子类和多重继承歧义

python-3.x - 如何在 Python 中使用类装饰器混合行为?

python - 将 C++ 映射转换为 Python 字典

c++ - 未记录的功能不应在列表中可见/显示 - 仅为记录的实体发布文档

c++ - 在容器中存储模板化对象

c++ - fseek 现在支持大文件

C++ 编译时迭代与 get 函数

c++ - 可互换使用的类型和非类型模板参数