【问题标题】:What is a difference between a C++ concept and an interface?C++ 概念和接口之间有什么区别?
【发布时间】:2016-04-24 18:53:16
【问题描述】:

我的理解是,C++ library concept 之于 C++,就像 Closeable 之类的接口之于 Java(根据链接的源代码,概念是:命名的一组要求)。

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

【问题讨论】:

  • “库概念”是“在 C++ 标准的规范性文本中用于定义标准库期望的命名要求”;也就是说,它们不以任何方式存在于 C++ 中,而仅用于定义它。
  • 是的,我指的是 C++ 库概念而不是 C++ 概念。

标签: c++ interface virtual c++-concepts


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

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

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

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

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

【讨论】:

    【解决方案2】:
    1. 不,这是错误的。 Java 中的接口与 C++ 中的接口相同(每个方法都是虚拟纯的类)。

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 2012-03-23
      • 1970-01-01
      • 2011-03-07
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多