template标签_C++核心准则T.65:使用标签分发提供函数的不同实现

85df255df8f799cedef0f99d72336f7c.png

T.65: Use tag dispatch to provide alternative implementations of a function

T.65:使用标签分发提供函数的不同实现

Reason(原因)

  • A template defines a general interface.模板定义普遍接口。
  • Tag dispatch allows us to select implementations based on specific properties of an argument type.标签分发允许我们根据参数类型的特定属性选择实现方式。
  • Performance.性能

Example(示例)

This is a simplified version of std::copy (ignoring the possibility of non-contiguous sequences)

这是std::copy的简化版本(忽略非连续序列)

struct pod_tag {};struct non_pod_tag {};template struct copy_trait { using tag = non_pod_tag; };   // T is not "plain old data"template<> struct copy_trait { using tag = pod_tag; };         // int is "plain old data"templateOut copy_helper(Iter first, Iter last, Iter out, pod_tag){    // use memmove}templateOut copy_helper(Iter first, Iter last, Iter out, non_pod_tag){    // use loop calling copy constructors}templateOut copy(Iter first, Iter last, Iter out){    return copy_helper(first, last, out, typename copy_trait::tag{})}void use(vector& vi, vector& vi2, vector& vs, vector& vs2){    copy(vi.begin(), vi.end(), vi2.begin()); // uses memmove    copy(vs.begin(), vs.end(), vs2.begin()); // uses a loop calling copy constructors}

This is a general and powerful technique for compile-time algorithm selection.

这是一个可以在编译时选择算法的普遍和强大的技术。

Note(注意)

When concepts become widely available such alternatives can be distinguished directly:

当概念可以被普遍使用时,这样的选项可以直接区分:

template    requires Pod>Out copy_helper(In, first, In last, Out out){    // use memmove}templateOut copy_helper(In, first, In last, Out out){    // use loop calling copy constructors}

Enforcement(实施建议)

???

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t65-use-tag-dispatch-to-provide-alternative-implementations-of-a-function

新书介绍

《实战Python设计模式》是作者最近出版的新书,拜托多多关注!

bbcc77785d81ba9b5201d82c6ed0cddc.png

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。


觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows服务器学习篇:服务器连接与退出

此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章&#xff0c;非常基础简单&#xff0c;现拿出来给大家分享。当然&#xff0c;已工作人士可直接忽略... 一、Windows服务器连接 1. 在桌面菜单中的“运行”里&#xff0c;输入mstsc命令&#xff0c;然后回车…

nginx动静分离配置_Nginx动静分离

动静分离动静分离&#xff0c;就是将JSP、Servlet等动态资源交由Tomcat或其他Web服务器处理&#xff0c;将CSS、js、image等静态资源交由Nginx或其他Http服务器处理&#xff0c;充分发挥各自的优势&#xff0c;减轻其他服务器的压力&#xff0c;搭建更为高效的系统架构。Nginx动…

用java自动化访问百度测试_java+eclipse+selenium+百度搜索设置自动化测试

在eclipse中新建一个项目baidutest&#xff1b;再在src文件夹中新建一个包com.baidutest.homework&#xff1b;再在包中新建一个java类baidusetting&#xff0c;并设置为静态类&#xff1b;最后在项目中新建一个lib文件夹&#xff0c;将selenium的所有架包拷贝到lib文件夹中&am…

内存泄漏以及常见的解决方法

之所以撰写这篇文章是由于前段时间花费了非常大的精力在已经成熟的代码上再去处理memory leak问题。写此的目的是希望我们应该养成良好的编码习惯&#xff0c;尽可能的避免这种问题&#xff0c;由于当你对着一大片的代码再去处理此类的问题&#xff0c;此时无疑添加了解决的成本…

python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜实例代码

首先找到要下载的歌曲排行榜的链接&#xff0c;这里用的是&#xff1a;https://music.163.com/discover/toplist?id3778678然后更改你要保存的目录&#xff0c;目录要先建立好文件夹&#xff0c;例如我的是保存在D盘-360下载-网易云热歌榜文件夹内&#xff0c;就可以完成下载。…

java thread 名称_Thread类常用方法之设置线程名称

package com.itheima.demo02.setName;/*设置线程的名称:(了解)1.使用Thread类中的方法setName(名字)void setName(String name) 改变线程名称&#xff0c;使之与参数 name 相同。2.创建一个带参数的构造方法,参数传递线程的名称;调用父类的带参构造方法,把线程名称传递给父类,让…

HDU 1108 最小公倍数

最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 32794 Accepted Submission(s): 18303Problem Description给定两个正整数&#xff0c;计算这两个数的最小公倍数。Input输入包括多组測试数据&#…

Java为xml跟节点添加子节点_如何将xml节点作为第一个子节点插入Java中的另一个xml文档中?...

小编典典如果事实证明我只是为您做功课&#xff0c;我会感到非常恼火。package com.akonizo.examples;import java.io.ByteArrayInputStream;import java.io.StringWriter;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import j…

成员变量和局部变量的区别_Java 变量类型

点击上方“蓝字”带你去看小星星今天主要学习Java变量类型&#xff0c;主要是局部变量、实例变量和类变量(静态变量)。Java语言中&#xff0c;所有的变量在使用前必须声明。声明变量的基本格式如下&#xff1a;type identifier [ value][, identifier [ value] ...] ;格式说明…

java gson序列化_java – Gson多态序列化

使用Gson 2.2.2我正在尝试序列化POJO(行为)的数组列表.我有一个适配器几乎是我在网上看到的副本&#xff1a;public class BehaviorAdapter implements JsonSerializer {private static final String CLASSNAME "CLASSNAME";private static final String INSTANCE …

【云图】如何制作附近实体店的地图?-微信微博支付宝

【云图】如何制作附近实体店的地图&#xff1f;-微信微博支付宝 原文:【云图】如何制作附近实体店的地图&#xff1f;-微信微博支付宝 摘要&#xff1a; 附近连锁店地图与全国连锁店地图&#xff0c;最大的区别就是&#xff1a; 1、附近连锁店地图需要先定位&#xff0c;然后搜…

php curl跨域cookie_PHP curl模拟文件上传(接口请求实现跨域文件中转)

3e2f08c0c11a8416dd107bbfc9159718.jpg客户端代码请求参数参数类型参数说明$urlstringpost提交的服务器url路径$data数组表单数据$files数组表单文件public function curl_custon_postfields($url, array $data array(), array $files array()){$curlfiles array();foreach …

oracle 分页_80分页查询,不止写法

据孔老先生说,茴香豆的茴字有四种写法,那oracle的分页查询又有多少种写法呢?分页查询,其实本质上就是topN查询的变种, 如果把topN的一部分结果集去掉,就变成了分页.topN的基本写法,两层select,第一层先order by,第二层再用rownum:select owner,object_name,object_id,rownum a…

笔记:Hadoop权威指南 第1章 初识Hadoop

大数据处理遇到问题&#xff1a; (1)、磁盘存储容量快速增加&#xff0c;但是访问速度进步不大&#xff1b;用户乐意使用磁盘共享访问。 (2)、硬件故障&#xff0c;可以使用备份解决。 (3)、分布式系统&#xff0c;需要可靠性。 关系数据库与MapReduce比较&#xff1a; (1)、磁…

php switch if,php switch 与 if else 区别

在php中switch是选择&#xff0c;if else也有同理&#xff0c;但是它们肯定是有区别的&#xff0c;那么我们来看看它们两者的区别在哪里呢&#xff0c;下面先看switch case语句吧。switch($id){case 1:return asp/;break;case 2:return phper/;break;case 3:return jsp/;break;…

python读取mat数据是字典形式如何转化为矩阵_mat2json, python读取mat成字典, 保存json...

python程序, 实现matlab的.mat格式转化为dict / json .第一个参数mat_path代表需要转化的mat路径;第二个参数, 如果需要把字典序列化成json, 添加这一参数, 代表json存放位置;返回值: 转化好的字典import osimport jsonimport scipy.io as spioimport pandas as pddef loadmat(…

GitHub上创建组织

4.3. 组织和团队 GitHub 在早期没有专门为组织提供账号&#xff0c;很多企业用户或大型开源组织只好使用普通用户账号作为组织的共享账号来使用。后来&#xff0c;GitHub推出了组织这一新的账号管理模式&#xff0c;满足大型开发团队的需要。 组织账号是不能用来登录的&#xf…

jquery根据value值php,表单php传值后jquery清除表单某项value问题

表单php文件我现在写了一个jquery打算每次提交后清除姓名中的内容代码如下$(function() { $(:input,#recordform) .not(:button, :submit, :reset, :hidden) .val() })请问怎么使用啊 加在哪个都无法实现提交后清除姓名求助&#xff01;回复讨论(解决方案)不知道你的 js 函数 c…

python未将对象引用设置到对象的实例_在Python中使用pingarapi。服务器引发Webfault:对象引用未设置为对象的实例...

大家晚上好。我想说的是&#xff0c;我对wsdl、soap、suds这整件事都很陌生&#xff01;尽可能多地提供信息。wsdl是这个http://api3.pingar.com/PingarAPIService.asmx?WSDL我花了好几个小时试图找出我正在使用的代码有什么问题&#xff0c;但最终还是一无所获。我借用了这里…

php 网站上传大小限制吗,配置PHP程序网站上传文件大小的限制!

PHP程序做的网站&#xff0c;上传文件大小的限制&#xff0c;是在PHP的配置文件中设置的。WORDPRESS网站也是PHP程序&#xff0c;我们会在WordPress里面的很多地方遇到文件上传大小的限制&#xff0c;比如在媒体库里面&#xff0c;上传图片&#xff1b;恢复数据时&#xff0c;上…