【问题标题】:C++'s version of <? extends AnotherClass> [duplicate]C++ 版本的 <?扩展另一个类> [重复]
【发布时间】:2014-12-08 07:41:14
【问题描述】:

我只是从 Java 跳到 C++。我现在对 C++ 相当有信心,我正在尝试制作一个模板类。 C++ 是否有办法保证模板参数扩展某个类?在 Java 中,我可以使用 class MyClass。如果没有,有没有办法绕过这个限制?

谢谢!

【问题讨论】:

  • 如前所述,Java 和 C++ 完全不同,stackoverflow.com/questions/25386765/… 提供了一些背景知识。
  • 非常感谢,这有助于澄清。
  • 天哪,这似乎是重复的。我确实先环顾四周。

标签: c++ templates


【解决方案1】:

你可以static_assert(std::is_base_of&lt;Base, T&gt;::value, "Argument must extend base!");

但是,请注意,相对于在 Java 中执行此操作,在 C++ 中这几乎完全没有价值。几乎没有真正需要它的用例。

【讨论】:

  • 好的,我正在尝试创建一个 EventListener 类并强制 T 扩展事件。我应该在ctor中使用这个语句吗?
  • 如果你真的需要强制 T 派生自 Event。但就像我说的,这种约束在 C++ 中几乎毫无价值。如果你想强制执行,是时候退后一步重新考虑了。
  • 好的,谢谢。我会尽快接受。
  • 请注意,C++ 模板比 .Net 泛型更强大,后者比 Java 稍强一些。具体来说,它们在编译时通过替换您使用的实际模板参数编译它们之前进行实例化。
  • 方便知道,谢谢。
猜你喜欢
  • 2018-04-11
  • 1970-01-01
  • 2014-10-21
  • 2014-03-06
  • 2017-09-25
  • 2020-10-05
  • 1970-01-01
  • 2019-04-11
  • 2016-05-20
相关资源
最近更新 更多