【问题标题】:Template inheritance in C++ (porting Java code)C++ 中的模板继承(移植 Java 代码)
【发布时间】:2013-11-22 16:24:35
【问题描述】:

我想将一个 Java 程序移植到在一个类中使用泛型的 C++。

public class Graph<T extends Node> {
  ...
}

几年前我已经偶然发现了这个问题并且无法解决它,因为当时 C++ 不支持这个问题。现在这在 C++11 中是否可行,或者是否有任何方法可以强制编译器检查泛型类型是否继承了基类 Node?​​p>

template <typename T : public Node>
class Graph {
  ...
};

感谢您的帮助!

【问题讨论】:

  • @ThePlatypus 嵌套模板类的论坛主题与这个问题有什么关系?
  • 抱歉,误读了问题

标签: java c++ templates inheritance c++11


【解决方案1】:

有没有办法强制编译器检查泛型是否继承了基类Node?​​p>

您正在寻找std::is_base_of。现在,要使其成为编译时检查,您可以将其与 static_assert 一起使用。

在我看来,是否强制执行T 必须从Node 派生是一个判断问题。如果T 实现了所有必要的方法以便Graph 类编译,我认为没有理由强制要求T 必须从Node 派生。

【讨论】:

  • +1 表示不强制执行。 C++ 不是 Java,不需要 Java 提供的拐杖。
  • 呃,这不是概念吗?
  • @Skeen 是的,最终概念将成为解决方案。但是,在 C++11 中,这可能是最接近的。
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多