C ++:Enforcing模板类型实现了一个方法

时间:2012-10-17 11:49:20

标签: c++ templates interface

我有一个模板类,我想知道是否可以强制模板类类型实现某个接口,特别是我想强制该类型重载operator=方法。在Java中我会写:

public class Tree<T implements IComparable>{
    public Tree(Vector<T> x){...}
}

C ++的替代方案是什么?

2 个答案:

答案 0 :(得分:5)

只需编写代码即可。如果没有,则在用户传入不合格类型时将无法编译。这里不需要明确的功能。但是为什么你真的需要像IComparable这样的接口呢?模板是鸭子类型。

但模板错误可能会变得令人讨厌。您可以使用类型特征和静态断言来简化这一过程。但是,标准没有提供这样的特性,所以你必须用SFINAE写一个。

答案 1 :(得分:3)

简答:

没有;没有语言功能可以做到这一点。

Shotish答案:

您可以使用SFINAE和静态断言(在编译时计算的断言)来实现您想要的效果。不幸的是,这是一个非常简单的过程,需要很好地理解模板元编程。

Longish答案:

为新的C ++ 11标准建议使用这些功能,但是没有通过审核过程。在这里阅读更多http://en.wikipedia.org/wiki/Concepts_(C%2B%2B)。在本次会议上(波特兰10月12日至19日),Herb Sutter建议我们应该尝试两阶段发布(一个未成年人,然后是新功能发布),并且概念将包含在第一个次要版本中。接受此提议的天气将在会议结束后提供。