可變參數(shù)模板

#include <iostream>
#include <thread>
using namespace std;

template <typename T>
void show(T girl)      // 向超女表白的函數(shù),參數(shù)可能是超女編號(hào),也可能是姓名,所以用T。
{
    cout << "親愛的" << girl << ",我是一只傻傻鳥。\n";
}

// 遞歸終止時(shí)調(diào)用的非模板函數(shù),函數(shù)名要與展開參數(shù)包的遞歸函數(shù)模板相同。
void print()
{
    cout << "遞歸終止。\n";
}

// 展開參數(shù)包的遞歸函數(shù)模板。
template <typename T, typename ...Args>
void print(T arg, Args... args)
{
    //cout << "參數(shù): " << arg << endl;         // 顯示本次展開的參數(shù)。

    show(arg);        // 把參數(shù)用于表白。

    //cout << "還有" << sizeof...(args) << "個(gè)參數(shù)未展開。" << endl;  // 顯示未展開變參的個(gè)數(shù)。

    print(args...);     // 繼續(xù)展開參數(shù)。
}

template <typename...Args>
void func(const string& str, Args...args)   // 除了可變參數(shù),還可以有其它常規(guī)參數(shù)。
{
    cout << str << endl;    // 表白之前,喊句口號(hào)。

    print(args...);    // 展開可變參數(shù)包。

    cout << "表白完成。\n";
}

int main(void)
{
    //print("金蓮", 4, "西施");
    //print("冰冰", 8, "西施", 3);
    func("我是絕世帥歌。", "冰冰", 8, "西施", 3);  // "我是絕世帥歌。"不是可變參數(shù),其它的都是。
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容