C ++“概念”与鸭子输入之间是什么关系?

问题描述 投票:2回答:1

这里有一个关于模板和鸭子输入之间的关系的较早的问题(8年前!):What's the relationship between C++ template and duck typing?我已经为C ++的一项新功能借用并修改了我的问题的标签行。

随着C ++ 20的出现,“概念”的新功能看起来更像是鸭式打字功能。 (作为正确回答先前问题的模板,请注意,not是否提供鸭子类型。)新的C ++“概念”等同于C ++的鸭子类型是否正确?如果没有,那有什么不同?

c++20 duck-typing c++-concepts
1个回答
0
投票

这实际上取决于您如何定义“鸭子类型”。

如果使用dictionary definition(“如果它走路像鸭子,却像鸭子一样嘎嘎叫,那么它一定是鸭子”),然后先概念templates are a form of duck typing

templates are not duck typing本质上是该术语常用方式的一个论点:据说使用“鸭子类型”的语言(Python,Lua等)对鸭子所在的位置进行了大部分/全部验证。实际上在运行时是鸭子。模板在编译时执行等效操作,因此它们不代表鸭子类型。

请注意,概念不会影响这两种解释。如果您认为运行时检查是“鸭式输入”性质的基本组成部分,那么即使使用概念,模板也不是鸭式输入。

因此,如果您觉得模板是鸭子式的概念前概念,那么您可能会感到概念后的感觉相同。反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.