templatevoid fun(ARGS ... args)
2,函數參數包(function parameter pack):它指函數參數位置上的變長參數,例如上面例子中的args
一般情況下 參數包必須在最後面,例如:
templatevoid fun(T t,Args ... args);//合法 template void fun(Args ... args,T t);//非法
有一個新的運算符:sizeof...(T) 可以用來獲知參數包中打包了幾個參數,注意 不是 參數所占的字節數之和。
#includeusing namespace std; template //Args:模板參數包 void func(Args ...args) //args:函數參數包 { cout << sizeof...(args) << endl; } int main() { func(1, 2, 3, 4, 5); //輸出5 return 0; }
函數實例
一個常用的技巧是:利用模板推導機制,每次從參數包裡面取第一個元素,縮短參數包,直到包為空。
#includeusing namespace std; template void func(const T& t) { cout << t << endl; } template //Args:模板參數包 void func(const T& t, Args ...args) //args:函數參數包 { cout << t << endl; func(args...); } int main() { func(1, 2, 3, 4, 5); return 0; }