我有一个模板类,我想知道是否可以强制模板类类型实现某个接口,特别是我想强制该类型重载operator=
方法。在Java中我会写:
public class Tree<T implements IComparable>{
public Tree(Vector<T> x){...}
}
C ++的替代方案是什么?
答案 0 :(得分:5)
只需编写代码即可。如果没有,则在用户传入不合格类型时将无法编译。这里不需要明确的功能。但是为什么你真的需要像IComparable这样的接口呢?模板是鸭子类型。
但模板错误可能会变得令人讨厌。您可以使用类型特征和静态断言来简化这一过程。但是,标准没有提供这样的特性,所以你必须用SFINAE写一个。
答案 1 :(得分:3)
没有;没有语言功能可以做到这一点。
您可以使用SFINAE
和静态断言(在编译时计算的断言)来实现您想要的效果。不幸的是,这是一个非常简单的过程,需要很好地理解模板元编程。
为新的C ++ 11标准建议使用这些功能,但是没有通过审核过程。在这里阅读更多http://en.wikipedia.org/wiki/Concepts_(C%2B%2B)。在本次会议上(波特兰10月12日至19日),Herb Sutter建议我们应该尝试两阶段发布(一个未成年人,然后是新功能发布),并且概念将包含在第一个次要版本中。接受此提议的天气将在会议结束后提供。