网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C++11可变参数模板的参数转发举例分析

本篇内容主要讲解“C++11可变参数模板的参数转发举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11可变参数模板的参数转发举例分析”吧!

成都创新互联公司是一家专业提供沙洋企业网站建设,专注与做网站、成都网站设计、H5开发、小程序制作等业务。10年已为沙洋众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

实例

很多软件系统都存在日志(log)功能,通过日志信息可以确认系统的状态和动作的过程。日志大多是文本形式的。虽然很方便,但是碍于文本形式本身的局限性,存储过程中会发生信息的丢失。

本文实现一个可以保存多种信息的信息存储类。

C++11可变参数模板的参数转发举例分析

Segment是一个抽象类,定义了信息片段的基本形态,代码如下:

C++11可变参数模板的参数转发举例分析

由于只是一个雏形,目前只是定义了一个output操作并重载了输出运算符。目的是为了以文本形式输出信息的内容。

接下来是两个派生类,分别用于存储整数信息和字符串信息。

C++11可变参数模板的参数转发举例分析

IntSegment类的内容很简单,这里省略说明。

StringSegment类需要注意的是:构造函数有两个版本,分别对应左值引用参数和右值引用参数。当参数类型为左值引用时,m_msg成员执行拷贝构造函数;当参数类型为右值引用时,m_msg成员执行移动构造函数。

最后是MsgHolder类。

C++11可变参数模板的参数转发举例分析

MsgHolder类使用一个vector来保存信息片段,使用output配合输出运算符输出文本形式的信息。

MsgHolder还另外提供了三个add函数模板,前两个固定参数的add方法用于创建IntSegment和StringSegment对象,可变参数的方法用于接受不特定多数的参数并转发。

可变参数模板参数转发

和固定参数模板函数同样,可变参数模板同样会发生引用合并,所以在模板参数传递的过程中,也使用了std::forward。其用法如下:

add(std::forward(rest)...);

MsgHolder用法示例

上述准备工作完成后,就可以使用它们了。示例代码如下:

C++11可变参数模板的参数转发举例分析

在add方法中,分别投入了整数,字符串常量,左值引用和右值引用。对于每一种情况都产生了正确的输出;在右值引用的场合也发生了移动操作。

也就是说,使用者希望继续使用字符串时(ltest的情况),就正常传递该参数,这时存储字符串的拷贝;使用者明确不再需要某个字符串时(rtest的情况),使用std::move通知给编译器,这时存储的就是字符串本身而不会发生拷贝动作。

如果没有正确使用std::forward的话,右值引用的部分就无法正常动作。无论哪种情况都会发生字符串拷贝。

关于扩展信息存储类的扩展

目前的MsgHolder还只是一个雏形,您可以增加Segment的派生类以扩展支持的数据类型;也可以增加输出方法以提供其他形式的输出。

到此,相信大家对“C++11可变参数模板的参数转发举例分析”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:C++11可变参数模板的参数转发举例分析
文章链接:http://bjjierui.cn/article/igehij.html

其他资讯