可变参数模板
C++11增加了可变参数模板,这就可以让函数的括号内输入任意个参数。
可变参数模板知道有即可,不常用。
函数模板
参数包迭代方式展开(推荐使用)
语法
void func(){} //必须有一个同名的重载函数在前面!
template<class...T>
void func(T... args){}
举例:
//如果这个同名的重载函数在函数模板前没有声名就会报错:未匹配到func函数
void func() {
cout << "结束" << endl;
}
template<class T,class... Args>
void func(T frist, Args... other) {
cout << frist << endl;
func(other...);
}
int main(void)
{
func(1,2,3);
return 0;
}
参数包逗号表达式展开(不推荐使用)
template <class T>
void printarg(T t)
{
cout << t << endl;
}
template <class ...Args>
void func1(Args... args)
{
int arr[] = { (printarg(args), 0)... };
}
逗号表达式:
上例子中(printarg(args), 0)
,会先执行printarg(args)
,执行完成后返回逗号表达式(printarg(args), 0)
中的第二位,即返回0。