c++11变长参数函数模板

By francis_hao Mar 25,2018

一个最简单的实例大概是这个样子:

#include

**using****namespace**std**;**



/*
变长参数函数模板声明*/

template**<**typename**...**T**>**

voidprint**(**T**...**val**);**



/*
边界条件*/

voidprint**(**void**)**

**{**

cout**<<**"here end"**<<**endl**;**

**}**



/*
递归的特例化定义*/

template**<**typenameT1**,**typename**...**T2**>**

voidprint**(**T1 start**,**T2**...**var**)**

**{**

cout**<<**"sizeof ... now is: "**<<sizeof...****(**var**)<<**endl**;**

cout**<<**start**<<**endl**;**

print**(**var**...);**

**}**





intmain**(**void**)**

**{**

print**(**1**,**2**,**3**,**4**);**

**return**0**;**

**}**

其中的声明其实是没什么用的,只是告诉使用者可以按照这样的格式使用,如果不做这个声明,只保留"边界条件"和"递归的特例化定义",这样虽然可行,但是未免会造成困惑。

执行结果如下:

c++11变长参数函数模板

实际上,这个"变长"付出的代价还是很大的,要递归的实例出n个函数,最终再调用边界条件的函数。过程如下

c++11变长参数函数模板

c++11变长参数函数模板

以上可见,这个变长参数函数模板实现的一点也不"优雅",有点强行打补丁的感觉。看看"别人家的孩子"在这个问题上是怎么做的呢?以python为例,没有对比就没有伤害~

**def**printf**(***arg**):**

**for**val**in**arg**:**

**print(**val**)**



**if**"__main__"**==**__name__**:**

printf**(**1**,**2**,**3**,**4**)**

c++11变长参数函数模板

本文由 刘英皓 创作,采用 知识共享署名-非商业性使用-相同方式共享3.0中国大陆许可协议 进行许可。欢迎转载,请注明出处:

转载自:http://www.cnblogs.com/yinghao1991/p/8644943.html

参考

【1】Michael Wong,IBM XL编译器中国开发团队 著 深入理解C++11:C++11新特性解析与应用 机械工业出版社:北京,2013.6
原文链接: https://www.cnblogs.com/yinghao-liu/p/8644943.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/271100

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午9:42
下一篇 2023年2月14日 下午9:42

相关推荐