这并不是一个完全相似的比喻,但概念类似于接口。只有纯虚成员函数的类更接近于Java接口。Java泛型可能更接近于C++的概念,但它们的限制要多得多。你只能使用它们来要求类型继承特定的基类或接口(我可能有些错误)。Haskell类型类与C++的概念相当相似。
C++接口是一个类。实现接口意味着继承接口并实现纯虚成员函数。概念是一组要求。符合概念意味着符合所有要求。可以要求特定表达式的有效性(必须具有名为iterator
的成员类型别名)或行为(i++
必须等同于It ip=i; ++i; return ip;
)。
接口的继承可以且必须在语言中定义,但目前没有语言支持正式指定概念。已经提出了语言支持,但尚未包含在当前的(C++14)标准中。
继承是动态(运行时)多态,而概念是与模板结合使用的静态(编译时)多态。
不等同。动态和静态多态性是非常不同的事情。
不,这是错误的。Java中的接口与C++中的接口相同(一个类中的每个方法都是虚拟纯函数)。
C++概念推断类功能,而不是C++接口定义类功能。
C++概念与继承无关。概念确定了一个类可以做什么,而不是一个类应该如何实现。