获取参数个数
template <class... T>
void f(T... args)
{
cout << sizeof...(args) << endl; //打印变参的个数
}
f(); //0
f(1, 2); //2
f(1, 2.5, ""); //3
获取参数
每次获取几个参数,取决于参数包前面有几个参数,并且调用的时候,参数数量必须是每次解包参数的倍数。
template <class T, class ...Args>
// 参数包前面只有一个参数,每次解包只需要解 1个即可。调用时 print(); print(1); print(1, 2); 等等都是可以的。
void print(T head, Args... rest)
// 参数包前面有两个参数,每次解包需要解 2个。 在调用的时候,参数个数必须是 2 的倍数。print(); print(1, 2); print(1, 2, 3, 4) 这些是正确的。
// print(1, 2, 3); 这个就是错误的,编译不通过。
void print(T head, T head2, Args... rest)
void print()
{
cout << "empty()" << endl;
}
template <typename T, typename ... Args>
void print(T head, T head2, Args ... args)
{
cout << "Head: " << head << ", " << head2 << endl;
print(args...);
}
int main()
{
cout << "print()" << endl;
print();
//cout << "print(1)" << endl;
//print(1);
cout << "print(1, 2)" << endl;
print(1, 2);
cout << "print(1, 2, 3, 4)" << endl;
print(1, 2, 3, 4);
}
标签:...,cout,void,解包,参数,可变,print,模板
From: https://www.cnblogs.com/ramlife/p/16630769.html