C++11新特性(70)-包扩展

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/craftsman1970/article/details/82429917

除了获取参数包的大小之外,能对它做的就只有扩展了。

简单扩展

假设我们有下面的模板函数。

这是一个简单的加法函数,将参数a,b,c的值相加。

另外有一个可变参数的模板函数sum,调用add函数。

光从形式上来看,两个函数的签名完全不同,但是程序可以正常执行。其原因就是发生了包扩展,编译器根据add的需求将values包进行了扩展。包扩展的格式就是在包名后面加上三个小点。

考虑通过下面的代码调用sum函数。

第一个实参1赋值给了形参t,values则包含了另外两个实参2和3。values展开的结果就是2,3。也就是说,add(t, values...)等价于add(1, 2, 3)。

更进一步

在理解了简单扩展的基础上,看下面的代码。

这是利用add函数计算平方和的模板函数。注意参数展开部分的写法:(value*value)...

这里小括号的用法,...的位置都需要考虑。

作者感受

可变参数模板函数编程是一种很神奇的体验。

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

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

猜你喜欢

转载自blog.csdn.net/craftsman1970/article/details/82429917