【问题标题】:Can a template class have pure virtual functions and virtual operators?模板类可以有纯虚函数和虚运算符吗?
【发布时间】:2020-01-30 05:34:01
【问题描述】:

我的教授非常坚决地认为接口类不能被模板化。具体来说,纯虚函数的类不能有模板参数。更进一步,他说你不能做虚拟运营商。

这是他当时给我们展示的例子。

template <typename T>
class Array {
public:
  virtual void fill(T t) = 0;
  virtual T& operator[](size_t i) const = 0;
  // ... 
};

这段代码没有错吧?在 C++ 历史上是否曾经有过这样的点无法编译?我在作业中使用了这种精确形式的代码,它运行良好。

【问题讨论】:

  • 据我所知,问题在于虚函数不能是模板。但是没有什么禁止模板类中的非模板虚函数(如您的示例中所示)。
  • @max66 感谢您的回复。教授建议让虚函数返回一个 int 或 void 并在调用站点进行类型转换。哎呀。他很惊讶我的代码能正常工作,因为它在过去从来没有为他工作过

标签: c++ templates operators pure-virtual


【解决方案1】:

模板类可以有纯虚函数和虚运算符吗?

是的。

这段代码没有问题吧?

没错。

在 C++ 历史上是否曾出现过无法编译的情况?

可能。我不能肯定地说它会与原始的 Cfront 转译器一起编译。

但是,它在任何标准 C++ 版本中都是格式良好的。

【讨论】:

  • Cfront 根本不支持模板。模板和异常在 Annotated Reference Manual 中被描述为未来的扩展。它们的细节是在 C++98 中制定和标准化的。所以这段代码不会用 Cfront 编译。
猜你喜欢
  • 2021-06-21
  • 2018-08-05
  • 2012-11-04
  • 2014-03-08
  • 2016-02-05
  • 2017-06-28
  • 2011-01-22
相关资源
最近更新 更多