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**;** **}** |
其中的声明其实是没什么用的,只是告诉使用者可以按照这样的格式使用,如果不做这个声明,只保留"边界条件"和"递归的特例化定义",这样虽然可行,但是未免会造成困惑。
执行结果如下:
实际上,这个"变长"付出的代价还是很大的,要递归的实例出n个函数,最终再调用边界条件的函数。过程如下
以上可见,这个变长参数函数模板实现的一点也不"优雅",有点强行打补丁的感觉。看看"别人家的孩子"在这个问题上是怎么做的呢?以python为例,没有对比就没有伤害~
**def**printf**(***arg**):** **for**val**in**arg**:** **print(**val**)** **if**"__main__"**==**__name__**:** printf**(**1**,**2**,**3**,**4**)** |
本文由 刘英皓 创作,采用 知识共享署名-非商业性使用-相同方式共享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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!