变长模板的正确语法是使用模板参数包和展开操作符来定义和使用多个模板参数。以下是一个示例代码:
#include
// 定义一个变长模板函数
template
void printArgs(Args... args) {
std::cout << "Number of arguments: " << sizeof...(args) << std::endl;
// 使用展开操作符来访问每个参数并打印
((std::cout << args << " "), ...); // C++17 及以上版本
// 或者使用递归展开操作符来访问每个参数并打印
//((void)std::initializer_list{(std::cout << args << " ", 0)...}); // C++11及以上版本
}
int main() {
printArgs(1, 2, 3, "hello", 4.5);
return 0;
}
在上述示例中,printArgs
函数使用了模板参数包 Args
来接受任意数量的参数。sizeof...(args)
可以获取参数包的大小,用来确定传递给函数的参数个数。
展开操作符 (...)
用于展开参数包,并在每个参数之间添加空格进行打印。在 C++17 及以上版本中,可以直接使用 ((std::cout << args << " "), ...)
来展开参数包。在 C++11 及以上版本中,可以使用递归展开操作符 ((void)std::initializer_list
来展开参数包。
运行上述代码将输出:
Number of arguments: 5
1 2 3 hello 4.5
可以看到,printArgs
函数成功打印了传递给它的参数,并正确计算了参数个数。这就是变长模板的正确语法和使用方法。
上一篇:变长模板的特化
下一篇:变长模板函数的递归结束过载