这里写目录标题
C++11 变长参数模板
在C++11之前,无论是类模板 还是函数模板,都只能按其指定的样子,接受一组固定数量的模板参数;
这已经大大提升了代码的复用!
在C++11之后,加入了新的表示方 法,允许任意个数、任意类别的模板参数,同时也不需要在定义时将参数的个数固定。更加像”黑魔法“了。
template<typename... Ts> class Magic;
模板类 Magic 的对象,能够接受不受限制个数的 typename 作为模板的形式参数,例如下面的定义:
class Magic<int,
std::vector<int>,
std::map<std::string,
std::vector<int>>> darkMagic;
既然是任意形式,所以个数为 0 的模板参数也是可以的:class Magic<> nothing;。 如果不希望产生的模板参数个数为 0,可以手动的定义至少一个模板参数:
template<typename Require, typename... Args> class Magic;
变长函数参数包
除了在模板参数中能使用…表示不定长模板参数外,函数参数也使用同样的表示法代表不定长参数。
传统 C 中的 printf 函数,虽然也能达成不定个数 的形参的调用,但其并非类别安全。而 C++11 除了能定义类别安全的变长参数函数外,还可以使类似 printf 的函数能自然地处理非自带类别的对象。除了在模板参数中能使用 … 表示不定长模板参数外, 函数参数也

本文介绍了C++11引入的变长参数模板特性,包括变长函数参数包的使用、如何解参数包,以及通过sizeof()、递归模板函数和变参模板展开的方法处理变长参数。示例展示了如何实现类安全的变长参数功能,强调了模板在C++中的重要性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



