C++中的模板继承(移植Java代码)

1 c++ java inheritance templates c++11

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

public class Graph<T extends Node> {
  ...
}
Run Code Online (Sandbox Code Playgroud)

几年前我已经解决了这个问题并无法解决它,因为C++在那些日子里不支持这个.现在可以在C++ 11中使用,还是有任何方法可以强制编译器检查泛型类型是否继承了基类节点?

template <typename T : public Node>
class Graph {
  ...
};
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Ali*_*Ali 5

是否有任何方法强制编译器检查泛型类型是否继承了基类节点?

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

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

  • +1不执行它.C++不是Java,不需要Java提供的拐杖. (2认同)