C ++“概念”和鸭子类型之间有什么关系?

Bri*_*ick 7 c++ duck-typing c++-concepts c++20

关于模板和鸭子类型之间的关系,有一个更早的问题(8年前!):C ++模板和鸭子类型之间的关系是什么? 对于C ++的新功能,我已经为我的问题借用并修改了标语行。

在C ++ 20中,将出现“概念”的新功能,该功能看起来更像是鸭式打字功能。新的C ++“概念”等同于C ++的鸭子类型是否正确?如果没有,那有什么不同?

Use*_*ess 4

C++20 将会出现“概念”的新功能,它看起来更像鸭子打字功能

并不真地。

  1. 如果我们接受模板已经是编译时鸭子类型

    • 我不同意链接问题和维基百科页面上接受的答案,因为做同样的事情并不是给它一个完全不同的名称的有说服力的理由。例如,请参见静态多态性与动态多态性。

    • 那么概念并不明显比模板更鸭子型

    • 这里的另一个论点是,鸭子类型通常假设您通过尝试使用 type 来表达类型约束。概念与该模型的距离比模板还远。

  2. 如果我们(错误地)同意所链接问题的已接受答案以及维基百科,那么

    • 模板不是鸭子类型(的一个例子)的原因是它们发生在编译时

    • 概念也在编译时发生

    • 量子电动力学

概念采用已有的模板做的事情(可能是也可能不是,但肯定是鸭子类型),并为专业化提供更细粒度的选项,和/或更清楚地表达类型约束,并且(希望)有助于生成更好的错误。

在所有这些操作下,鸭子的质量是不变的。