这里有一个关于模板和鸭子输入之间的关系的较早的问题(8年前!):What's the relationship between C++ template and duck typing?我已经为C ++的一项新功能借用并修改了我的问题的标签行。
随着C ++ 20的出现,“概念”的新功能看起来更像是鸭式打字功能。 (作为正确回答先前问题的模板,请注意,not是否提供鸭子类型。)新的C ++“概念”等同于C ++的鸭子类型是否正确?如果没有,那有什么不同?
这实际上取决于您如何定义“鸭子类型”。
如果使用dictionary definition(“如果它走路像鸭子,却像鸭子一样嘎嘎叫,那么它一定是鸭子”),然后先概念templates are a form of duck typing。
templates are not duck typing本质上是该术语常用方式的一个论点:据说使用“鸭子类型”的语言(Python,Lua等)对鸭子所在的位置进行了大部分/全部验证。实际上在运行时是鸭子。模板在编译时执行等效操作,因此它们不代表鸭子类型。
请注意,概念不会影响这两种解释。如果您认为运行时检查是“鸭式输入”性质的基本组成部分,那么即使使用概念,模板也不是鸭式输入。
因此,如果您觉得模板是鸭子式的概念前概念,那么您可能会感到概念后的感觉相同。反之亦然。