4

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

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

C ++中的替代方法是什么?

4

2 回答 2

5

只需编写代码假设它确实如此。如果没有,当用户传入不符合的类型时,它将无法编译。这里不需要明确的特征。但是到底为什么你需要一个像 IComparable 这样的接口呢?模板是鸭子类型的。

但是模板错误可能会很糟糕。您可以使用类型特征和静态断言来简化此操作。但是,标准没有提供这样的特征,因此您必须使用 SFINAE 编写一个。

于 2012-10-17T11:56:59.370 回答
3

简短的回答:

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

肖战回答:

可以使用SFINAE静态断言(在编译时评估的断言)来实现您想要的效果。不幸的是,这是一个不平凡的过程,需要对模板元编程有很好的理解。

长篇回答:

这些功能被建议用于新的 C++11 标准,但没有通过审查过程。在此处阅读更多信息http://en.wikipedia.org/wiki/Concepts_(C%2B%2B)。在当前会议(波特兰 10 月 12 日至 19 日)上,Herb Sutter 建议我们应该尝试一个两阶段的发布(一个次要版本,然后是一个新功能版本),并且概念将包含在第一个次要版本中。该提案是否被接受将在会后公布。

于 2012-10-17T11:53:16.810 回答