C++11 变长参数模板 & 如何展开变长参数
- 通过
typename ... Args
指定变长参数。 - 通常通过递归展开各个参数, 使用
sizeof ... (args)
获取变长参数个数。 - C++17 可以使用对if后的表达式使用
constexpr
进行条件编译。
#include <iostream>
using namespace std;
template<typename T0, typename ... Args>
void varArgsFunc(T0 t0, Args ...args){
cout<<t0<<endl;
if constexpr(sizeof...(args) > 0){
varArgsFunc(args...);
}
}
int main() {
varArgsFunc(1, "afdaj", 2.2, 4);
return 0;
}
// 1
// afdaj
// 2.2
// 4
- 应用举例:emplace_back(Args && ...);