我有一个模板类,我想知道是否可以强制模板类类型实现某个接口,特别是我想强制类型重载operator=
方法。在Java中我会写:
public class Tree<T implements IComparable>{
public Tree(Vector<T> x){...}
}
C ++中的替代方法是什么?
只需编写代码假设它确实如此。如果没有,当用户传入不符合的类型时,它将无法编译。这里不需要明确的特征。但是到底为什么你需要一个像 IComparable 这样的接口呢?模板是鸭子类型的。
但是模板错误可能会很糟糕。您可以使用类型特征和静态断言来简化此操作。但是,标准没有提供这样的特征,因此您必须使用 SFINAE 编写一个。
不; 没有语言功能可以做到这一点。
可以使用SFINAE
静态断言(在编译时评估的断言)来实现您想要的效果。不幸的是,这是一个不平凡的过程,需要对模板元编程有很好的理解。
这些功能被建议用于新的 C++11 标准,但没有通过审查过程。在此处阅读更多信息http://en.wikipedia.org/wiki/Concepts_(C%2B%2B)。在当前会议(波特兰 10 月 12 日至 19 日)上,Herb Sutter 建议我们应该尝试一个两阶段的发布(一个次要版本,然后是一个新功能版本),并且概念将包含在第一个次要版本中。该提案是否被接受将在会后公布。