Also on programmers.stackexchange.com :
我知道 STL 概念必须存在,并且称它们为“类”或“接口(interface)”是愚蠢的,而实际上它们只是文档化的(人类)概念并且无法在时间,但当有机会扩展语言以适应概念时,他们为什么不简单地修改类的功能和/或引入接口(interface)?
是不是一个概念非常类似于接口(interface)(100% 没有数据的抽象类)?通过观察,在我看来,接口(interface)似乎只缺乏对公理的支持,但也许可以将公理引入 C++ 的接口(interface)中(考虑假设采用 C++ 中的接口(interface)来接管概念),不是吗?我认为甚至自动概念也可以很容易地添加到这样的 C++ 接口(interface)(自动接口(interface) LessThanComparable,有人吗?)。
concept_map 不是非常 类似于适配器模式吗?如果所有方法都是内联的,则适配器在编译期之后基本上不存在;编译器只是将对接口(interface)的调用替换为内联版本,在运行时直接调用目标对象。
我听说过一种叫做静态面向对象编程的东西,它本质上意味着在通用编程中有效地重用面向对象的概念,从而允许使用 OOP 的大部分功能而不会产生执行开销。为什么没有进一步考虑这个想法?
我希望这已经足够清楚了。如果你认为我不是,我可以重写它;请告诉我。
最佳答案
OOP 和泛型编程有很大的区别,命中注定。
在 OOP 中,当您设计类时,您拥有认为有用的接口(interface)。完成了。
另一方面,在泛型编程中,只要类符合一组给定的要求(主要是方法,但也有内部常量或类型),那么它符合要求并且可能使用。 Concept 提议是关于将其形式化,以便在检查方法签名时直接进行检测,而不是在实例化方法体时进行检测。它还使检查模板方法变得更加容易,因为如果概念不匹配,一些方法可以在没有任何实例化的情况下被拒绝。
Concepts 的优点是你没有宿命论,你可以从 Library1 中选择一个类,从 Library2 中选择一个方法,如果合适,你就是金子(如果不合适,你也许可以使用概念图)。在 OO 中,您每次都需要编写一个成熟的适配器。
你是对的,两者看起来很相似。不同之处主要在于绑定(bind)的时间(以及 Concept 仍然具有静态分派(dispatch)而不是像接口(interface)那样的动态分派(dispatch)这一事实)。概念更加开放,因此更易于使用。
关于c++ - 当我们已经有了类和接口(interface)时,为什么要构思概念(泛型编程)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279802/