C++ "concept" 和 duck typing 之间有什么关系?
What's the relationship between C++ "concept" and duck typing?
这里有一个较早的问题(8 年前!)关于模板和鸭子类型之间的关系:What's the relationship between C++ template and duck typing? 我借用并修改了关于 C++ 新功能的问题的标记行。
在 C++20 中将有 "concept" 的新功能,它看起来更像是鸭子打字功能。新的 C++ "concept" 等同于 C++ 的 duck typing 是否正确?如果不是,那有什么不同?
这真的完全取决于你如何定义"duck typing"。
如果您使用 dictionary definition ("If it walks like a duck and it quacks like a duck, then it must be a duck"), then pre-concepts templates are a form of duck typing.
templates are not duck typing 的论点本质上是该术语常用方式的论点:据说使用 "duck typing" 的语言(Python、Lua、等)most/all 验证鸭子在运行时实际上是一只鸭子。模板在编译时执行它们的等效操作,因此它们不代表鸭子类型。
请注意,概念不会影响这两种解释。如果您认为运行时检查是 "duck typing" 本质的基本组成部分,那么即使有概念,模板也不是鸭子类型。
因此,如果您觉得模板是鸭子打字的预概念,那么您可能也有同样的感觉 post-概念。反之亦然。
With C++20 there will be the new feature of "concept" that looks much more like a duck-typing feature
不是真的。
如果我们接受模板已经是编译时鸭子类型
我不同意链接问题和维基百科页面上接受的答案,因为在编译时做 同样的事情 而不是 运行 时间并不是给它一个完全不同的名字的有说服力的理由。例如,参见静态与动态多态性。
那么概念显然并不比模板更像鸭子类型
这里的另一个论点是鸭子类型通常假定您通过尝试使用类型来表达您的类型约束。概念比模板更远离这个模型。
如果我们同意(错误地)接受链接问题的答案和维基百科,那么
模板不是鸭子类型(示例)的原因是它们发生在编译时
概念也发生在编译时
QED
概念采用模板已经做的事情(可能是也可能不是,但绝对是鸭子打字)并提供更细粒度的专业化选项,and/or更清楚地表达类型约束,并且(希望)有助于产生更好的错误。
鸭子的质量在所有这些操作下都是不变的。
这里有一个较早的问题(8 年前!)关于模板和鸭子类型之间的关系:What's the relationship between C++ template and duck typing? 我借用并修改了关于 C++ 新功能的问题的标记行。
在 C++20 中将有 "concept" 的新功能,它看起来更像是鸭子打字功能。新的 C++ "concept" 等同于 C++ 的 duck typing 是否正确?如果不是,那有什么不同?
这真的完全取决于你如何定义"duck typing"。
如果您使用 dictionary definition ("If it walks like a duck and it quacks like a duck, then it must be a duck"), then pre-concepts templates are a form of duck typing.
templates are not duck typing 的论点本质上是该术语常用方式的论点:据说使用 "duck typing" 的语言(Python、Lua、等)most/all 验证鸭子在运行时实际上是一只鸭子。模板在编译时执行它们的等效操作,因此它们不代表鸭子类型。
请注意,概念不会影响这两种解释。如果您认为运行时检查是 "duck typing" 本质的基本组成部分,那么即使有概念,模板也不是鸭子类型。
因此,如果您觉得模板是鸭子打字的预概念,那么您可能也有同样的感觉 post-概念。反之亦然。
With C++20 there will be the new feature of "concept" that looks much more like a duck-typing feature
不是真的。
如果我们接受模板已经是编译时鸭子类型
我不同意链接问题和维基百科页面上接受的答案,因为在编译时做 同样的事情 而不是 运行 时间并不是给它一个完全不同的名字的有说服力的理由。例如,参见静态与动态多态性。
那么概念显然并不比模板更像鸭子类型
这里的另一个论点是鸭子类型通常假定您通过尝试使用类型来表达您的类型约束。概念比模板更远离这个模型。
如果我们同意(错误地)接受链接问题的答案和维基百科,那么
模板不是鸭子类型(示例)的原因是它们发生在编译时
概念也发生在编译时
QED
概念采用模板已经做的事情(可能是也可能不是,但绝对是鸭子打字)并提供更细粒度的专业化选项,and/or更清楚地表达类型约束,并且(希望)有助于产生更好的错误。
鸭子的质量在所有这些操作下都是不变的。