c++ - C++“概念”和鸭子类型有什么关系?
问题描述
这里有一个关于模板和鸭子类型之间关系的更早的问题(8 年前!):C++ 模板和鸭子类型之间的关系是什么? 我借用并修改了我关于 C++ 新特性的问题的标语。
随着 C++20 的出现,“概念”的新特性看起来更像鸭子类型的特性。新的 C++“概念”等同于 C++ 的鸭式打字是否正确?如果不是,它有什么不同?
解决方案
在 C++20 中,“概念”的新特性看起来更像鸭子类型的特性
并不真地。
如果我们接受模板已经是编译时的鸭子类型
我不同意链接问题和维基百科页面上接受的答案,因为在编译时而不是运行时做同样的事情并不是给它一个完全不同的名称的有说服力的理由。例如,参见静态与动态多态性。
那么概念显然并不比模板更鸭式
这里的另一个论点是,duck typing 通常假设您通过尝试使用 type 来表达您的类型约束。与模板相比,概念离这个模型更远。
如果我们(错误地)同意链接问题的已接受答案和维基百科,那么
模板不是鸭子类型的(一个例子)的原因是它们发生在编译时
概念也发生在编译时
量子点
概念采用模板已经做的事情(可能是也可能不是,但绝对是,鸭式打字)并为专业化提供更细粒度的选项,和/或更清晰地表达类型约束,并且(希望)有助于生成更好的错误。
在所有这些操作下,duckiness 的质量是不变的。
推荐阅读
- c++ - std:string::substr 是异常安全的吗?
- php - 如果它在文本框中传递,如何显示传递的变量
- javascript - 如何修复我的代码并获得数组中第一个和最后一个数字的相反顺序
- javascript - 从 Box3 创建 BoxBufferGeometry
- javascript - 数组和带有子字符串的字符串之间的部分交集
- perl - Perl 打印解释
- php - 如何从 Symfony 中的复选框类型中删除特定实体?
- javascript - 处理多个文件上传:当您将某些内容推送到数组时,数组何时更新?
- python - 将字典项目映射到熊猫系列时忽略大小写
- node.js - 无法使用 xpath 单击元素 - TypeError:无法读取未定义的属性“单击”