当我们已经有类和接口时,为什么构思概念(通用编程)?

Gui*_*ira 10 c++ oop generic-programming c++-concepts

也在programmers.stackexchange.com上:

我知道STL概念必须存在,并且将它们称为"类"或"接口"是愚蠢的,而实际上它们只是文档化(人类)概念,当时无法转换为C++代码,但是当有机会扩展语言来容纳概念时,他们为什么不简单地修改类和/或引入接口的功能?

是不是一个非常类似于接口的概念(100%抽象类没有数据)?通过观察它,在我看来接口只是缺乏对公理的支持,但也许公理可以引入C++的接口(考虑假设采用C++中的接口来接管概念),不是吗?我认为甚至可以轻松地将自动概念添加到这样的C++接口(自动界面LessThanComparable,任何人?).

Concept_map 与Adapter模式非常相似吗?如果所有方法都是内联的,那么适配器在编译时间之外基本上不存在; 编译器只是用内联版本替换对接口的调用,在运行时直接调用目标对象.

我听说过一种称为静态面向对象编程的东西,它实质上意味着在泛型编程中有效地重用面向对象的概念,从而允许使用大多数OOP的功能而不会产生执行开销.为什么不进一步考虑这个想法?

我希望这很清楚.如果你认为我不是,我可以改写这个; 请告诉我

Mat*_* M. 6

OOP和Generic Programming,Predestination之间存在很大差异.

在OOP中,当您设计类时,您拥有了您认为有用的接口.它已经完成了.

另一方面,在通用编程中,只要类符合给定的一组要求(主要是方法,还有内部常量或类型),它就符合要求并可以使用.概念提议是关于形式化,以便在检查方法签名时可以直接进行检测,而不是在实例化方法体时.它还使得更容易检查模板方法,因为如果概念不匹配,某些方法可以在没有任何实例化的情况下被拒绝.

Concepts的优点是你不会受到Predestination的影响,你可以从Library1中选择一个类,从Library2中选择一个方法,如果它适合,你就是黄金(如果没有,你可以使用一个概念)地图).在OO中,每次都需要编写一个完整的适配器.

你说两者看起来很相似是对的.差异主要在于绑定的时间(以及Concept仍然具有静态分派而不是像接口那样的动态分派的事实).概念更加开放,因此更易于使用.

  • @ n2liquid:接口的问题不是抽象的必要.假设你设计了一个接口`interface Comparable {operator <; ==操作符; 我和我想来调用一个使用`interface LowerThanComparable {operator <; 然后我不能使用从你的界面派生的对象,因为你的界面不是从我的界面派生的.这就是我所说的宿命.除非我一度为您提供了我的接口,否则我不能将您的对象与我的算法一起使用.在模块化开发中真的很烦人. (2认同)