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

时间:2013-11-22 16:24:36

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

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

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

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

  

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

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

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