首页 > 解决方案 > C++“概念”和鸭子类型有什么关系?

问题描述

这里有一个关于模板和鸭子类型之间关系的更早的问题(8 年前!):C++ 模板和鸭子类型之间的关系是什么? 我借用并修改了我关于 C++ 新特性的问题的标语。

随着 C++20 的出现,“概念”的新特性看起来更像鸭子类型的特性。新的 C++“概念”等同于 C++ 的鸭式打字是否正确?如果不是,它有什么不同?

标签: c++c++20duck-typingc++-concepts

解决方案


在 C++20 中,“概念”的新特性看起来更像鸭子类型的特性

并不真地。

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

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

    • 那么概念显然并不比模板更鸭式

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

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

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

    • 概念也发生在编译时

    • 量子点

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

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


推荐阅读