4

我的理解是,C++ 库的概念对于 C++ 来说就像Closeable对 Java 的接口一样(根据链接的源代码,概念是:命名的需求集)。

  1. 这个比喻正确吗?
  2. C++ 接口(即具有纯虚方法的类)和 C++ 库概念之间有什么区别?
  3. 一般来说,通过多重继承实现 C++ 库概念是否等同于在 Java 中实现多个接口(没有多重继承)?
4

2 回答 2

2
  1. 这不是一个精确的类比,但概念类似于接口。只有纯虚成员函数的类更类似于 Java 接口。Java 泛型可能更类似于 C++ 概念,但它们的局限性要大得多。您只能使用它们来要求类型继承特定的基类或接口(我可能错了)。Haskell 类型类与 C++ 概念非常相似。

  2. C++ 接口是一个类。实现接口意味着继承接口并实现纯虚成员函数。概念是一组要求。符合一个概念意味着符合的类符合所有要求。对特定表达式的有效性(必须有一个名为 的成员类型别名iterator)或行为(i++必须等效于It ip=i; ++i; return ip;)可能有要求。

    接口的继承可以而且必须在语言中定义,但尚无语言支持正式指定概念。已提出语言支持,但未包含在当前 (C++14) 标准中。

    继承是动态(运行时)多态,而概念与模板结合使用,是静态(编译时)多态。

  3. 不等价。动态和静态多态是完全不同的东西。

于 2016-01-19T11:14:13.360 回答
0
  1. 不,这是错误的。Java 中的接口与 C++ 中的接口相同(每个方法都是虚拟纯的类)。

  2. C++ 概念推断类功能而不是 C++ 接口定义类功能。

  3. C++ 概念与继承无关。概念决定了一个类可以做什么,而不是一个类应该如何实现。

于 2016-01-19T10:47:20.760 回答