C++11的可變參數模板,對參數進行了高度的泛化,可以表示
- 任意數目
- 任意類型
語法爲 class或者typename後面加…
Template<class ... T>void func(T ... args)
{
cout<<”num is”<<sizeof ...(args)<<endl;
}
T 叫模板參數包
args 叫函數參數包
省略號的作用
- 說明一個包含0到n任意模板參數的參數包
- 在模板定義的右邊,可以將參數展成一個個獨立的參數
C++11可以使用遞歸函數的方式展開參數包,獲得每個參數的值。那麼就需要
- 一個參數包展開的函數
- 一個遞歸終止的函數
兩個函數若是重載,誰比較特化,就調用誰
int maximum(int n){
return n;
}
template<typename... Args>
int maximum(int n, Args...args)
{
return std::max(n, maximum(args...));
}