可變參數模板用法

//可變參數模板
//可變參數模板,可以創建可接受可變數量參數的模板函數和模板類
//本程序通過模板函數來實例一下可變參數模板的基本用法
#include<iostream>
using namespace std;
void one(){}//當最後一個參數傳完後,需要一個無參的重載版本


template <typename T>//當只剩最後一個參數時,編譯器優先選擇此模板,這樣最後一個輸出後面就沒有逗號了
void one(T v)
{
    cout << v << endl;
}


//...爲元運算符
//F 是一個模板參數包,f 是一個函數參數包,T 與一種類型匹配,F 與 T 的區別是 F 與任意數量的類型匹配
//關鍵點是:模板參數包 F 要與 函數參數包 f, 無論是類型還是數量上,都要相匹配。
template <typename T, typename... F>
void one(T v, F... f) //每次從傳的所有參數裏面拿出一個來給 v,這樣,就能遞歸完所有的傳參
{
    cout << v << ",";
    one(f...); //將元運算符...放在 f 的右邊,可以展開參數包,展開傳給f的一系列參數
}


int main()
{
    one("asd",1,2,3,4); //這一系列的參數傳給模板函數包F,F再將參數包傳給函數參數包f


    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章