C++核心准则T.10:为所有的模板参数定义概念
T.10: Specify concepts for all template arguments
T.10:为所有的模板参数定义概念
Reason(原因)
Correctness and readability. The assumed meaning (syntax and semantics) of a template argument is fundamental to the interface of a template. A concept dramatically improves documentation and error handling for the template. Specifying concepts for template arguments is a powerful design tool.
正确性和可读性。一个模板参数的假定含义(语法和语义)是模板接口的基础。概念大幅度改善了模板的文档化和错误处理。为模板参数定义概念是一个强有力的设计工具。
Example(实例)
template<typename Iter, typename Val>
// requires Input_iterator<Iter>
// && Equality_comparable<Value_type<Iter>, Val>
Iter find(Iter b, Iter e, Val v)
{// ...
}
or equivalently and more succinctly:
或者使用下面功能等价但更简洁的方式:
template<Input_iterator Iter, typename Val>
// requires Equality_comparable<Value_type<Iter>, Val>
Iter find(Iter b, Iter e, Val v)
{// ...
}
Note(注意)
"Concepts" are defined in an ISO Technical Specification: concepts. A draft of a set of standard-library concepts can be found in another ISO TS: ranges Concepts are supported in GCC 6.1 and later. Consequently, we comment out uses of concepts in examples; that is, we use them as formalized comments only. If you use GCC 6.1 or later, you can uncomment them:
“概念”被ISO技术规格:concepts定义。一套标准库concepts的初步版本可以在另一个ISO技术规格:ranges中找到。GCC6.1以后都支持concepts。因此我们在实例代码中注释掉使用concepts的部分;也就是说我们只是将它们用作标准的注释。如果你使用GCC6.1之后的版本,可以打开注释。
template<typename Iter, typename Val>
requires Input_iterator<Iter>&& Equality_comparable<Value_type<Iter>, Val>
Iter find(Iter b, Iter e, Val v)
{// ...
}
Note(注意)
Plain typename (or auto) is the least constraining concept. It should be used only rarely when nothing more than "it's a type" can be assumed. This is typically only needed when (as part of template metaprogramming code) we manipulate pure expression trees, postponing type checking.
直接的类型名(或auto)是最小约束的概念。它应该被极少使用,仅限于表现“它是一个类型”。这通常只在我们操作纯表达式树,延迟类型检查时有(作为模板元编程的一部分)存在的必要。
References: TC++PL4, Palo Alto TR, Sutton
参见:TC++PL4, Palo Alto TR, Sutton
Enforcement(实施建议)
Flag template type arguments without concepts
标记没有使用概念的模板类型参数。
原文链接
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t10-specify-concepts-for-all-template-arguments
新书介绍
《实战Python设计模式》是作者最近出版的新书,拜托多多关注!
本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。
对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。
觉得本文有帮助?请分享给更多人。
关注微信公众号【面向对象思考】轻松学习每一天!
面向对象开发,面向对象思考!
C++核心准则T.10:为所有的模板参数定义概念相关推荐
- java 成员变量声明顺序_C++核心准则讨论:按照成员声明的顺序定义和初始化成员变量...
Discussion: Define and initialize member variables in the order of member declaration 讨论:按照成员声明的顺序定义 ...
- modbus软件开发实战指南_C++核心准则?GSL:指南支持库
GSL: Guidelines support library GSL:指南支持库 The GSL is a small library of facilities designed to suppo ...
- php 语法 条件变量,C ++核心准则:注意条件变量的陷阱
今天,我写了一篇关于条件变量的恐怖文章.您应该意识到条件变量的这一问题.C ++核心准则CP 42仅声明:"不要无条件等待". 等待!条件变量支持一个非常简单的概念.一个线程准备一 ...
- 开源压缩算法brotli_Google的Brotli压缩算法,C ++核心准则以及更多新闻
开源压缩算法brotli 在本周的开源新闻综述中,我们将介绍Google的Brotli压缩算法,适用于GitHub的Classroom,C ++ Core Guidelines等! 2015年9月20 ...
- C++核心准则ES.56:只在需要将一个对象显式移动到另外的作用域时使用std::move
ES.56: Write std::move() only when you need to explicitly move an object to another scope ES.56:只在需要 ...
- C++核心准则T.46:要求模板参数最少是正规或半正规的
T.46: Require template arguments to be at least Regular or SemiRegular T.46:要求模板参数最少是正规或半正规的 Reason( ...
- binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...
目录 定义函数模板 使用函数模板 两阶段翻译 Two-Phase Translation 模板的编译和链接问题 多模板参数 引入额外模板参数作为返回值类型 让编译器自己找出返回值类型 将返回值声明为两 ...
- 计算机组成的ir是指,2002.10计算机组成原理§1控制器的基本概念⑵指令寄存器IR指令.ppt...
2002.10计算机组成原理§1控制器的基本概念⑵指令寄存器IR指令.ppt 第七章 在一个计算机系统中,中央处理器(CPU)是由两个主要部分──运算器和控制器组成的.有关运算器部分我们已在前面进行了 ...
- 一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义
一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义 在第一章节,你将内容页重置为网站定义.重置母版页到网站定义也没有什么不同.你丢失了在页面上做出的自定义,包括任何静 ...
- 计算机专业试讲10分钟教案,10分钟试讲教案模板.doc
10分钟试讲教案模板 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 10分钟试讲教案模板 试讲单位: 课程名称: 专业年级: 试讲学生: 教 ...
最新文章
- Android程序完全退出的三种方法
- VS 2005 文本编码小技巧
- .tcl文件_TCL电视如何安装第三方软件?当贝市场分享最新教程
- 一张图,看懂阿里云12年的“飞天日记”
- IT技术人员的35个特点,你占几个?
- POJ1821 单调队列//ST表 优化dp
- 认知NumPy数学运算库
- 从 Web1.0 到 3.0 你不知道的互联网的演进史!
- 前端测试框架(学习之路)前言
- 分享一个Ubuntu16.0.4安装MySQL5.7脚本
- 数据可视化如何做会更好
- 用户控件中复杂属性的设计时支持
- Servlet文件下载
- 音视频Share系列2---基于H.265的编码技术优化实战
- 来LAMP兄弟连的日子
- Presto Facebook 开源的大数据查询引擎
- 上位机软件与西门子PLC
- drop index mysql_MySQL修改和删除索引(DROP INDEX)
- 《设计模式修炼真经》15 — 模板方法模式
- 2019年新版新媒体运营学习路线,附完整视频+工具+运营经验