我想将Java程序移植到C ++,它在一个类中使用泛型。
public class Graph<T extends Node> {
...
}
几年前我已经解决了这个问题并无法解决它,因为C ++在那些日子里不支持这个。现在可以在C ++ 11中使用,还是有任何方法可以强制编译器检查泛型类型是否继承了基类节点?
template <typename T : public Node>
class Graph {
...
};
感谢您的帮助!
答案 0 :(得分:5)
是否有任何方法强制编译器检查泛型类型是否继承了基类节点?
您正在寻找std::is_base_of。现在,为了使其成为编译时检查,您可以将其与static_assert一起使用。
在我看来,判断是否强制执行T
必须来自Node
是一个问题。如果T
实现了所有必要的方法以便Graph
类编译,我认为没有理由强制T
必须从Node
派生。