有一个早期的问题(8年前!)关于模板和鸭子类型之间的关系,链接在这里:C++模板和鸭子类型有什么关系? 我借用并修改了这个标签,用于我关于C++新功能的问题。
随着C++20的到来,将会有一个名为"concept"的新功能,看起来更像是一种鸭子类型的特性。是否正确地认为新的C++ "concept"等价于C++的鸭子类型?如果不是,那么它们有什么不同之处?
有一个早期的问题(8年前!)关于模板和鸭子类型之间的关系,链接在这里:C++模板和鸭子类型有什么关系? 我借用并修改了这个标签,用于我关于C++新功能的问题。
随着C++20的到来,将会有一个名为"concept"的新功能,看起来更像是一种鸭子类型的特性。是否正确地认为新的C++ "concept"等价于C++的鸭子类型?如果不是,那么它们有什么不同之处?
这真的取决于你如何定义“鸭子类型”。
如果您使用字典定义(“如果它走起来像一只鸭子,嘎嘎声像一只鸭子,那么它一定是一只鸭子”),那么预先概念模板是鸭子类型的一种形式。
认为模板不是鸭子类型的论点本质上是从术语通常使用的方式进行的:被称为使用“鸭子类型”的语言(Python、Lua等)在运行时执行大部分/全部验证以确保鸭子实际上是一只鸭子。模板在编译时执行其等效操作,因此它们不代表鸭子类型。
请注意,概念不会影响这两种解释中的任何一种。如果您认为运行时检查是“鸭子类型”本质的基本部分,则即使使用概念,模板也不是鸭子类型。
如果你觉得模板是鸭子类型的预先概念,那么在概念之后你可能会有同样的感受。反之亦然。