C 可變引數模板函式基本用法

2021-09-25 08:37:34 字數 781 閱讀 7568

可變引數模板可以建立任意個引數的模板函式和模板類,本文主要介紹可變引數模板函式。

template//args是乙個模板引數包

void show(args... args) //args是乙個函式引數包

由上面**可知,args是乙個模板引數包,args是乙個函式引數包,都表示一系列的引數。

可變引數模板函式一般用於可變引數輸出,可變引數args的呼叫不能用args[2]方式呼叫,可以採用遞迴展開和非遞迴展開。下面示例給出了兩種遞迴展開和非遞迴展開用法。

/*定義和宣告乙個多引數模板函式,遞迴方式展開*/

void show1(){} //定義零個引數函式,遞迴呼叫到零個引數函式時。呼叫該函式,然後終止繼續遞迴

template//args是乙個模板引數包

void show1(const t &value,const args &... args) //args是乙個函式引數包

由上面**可知,模板函式show1()為遞迴呼叫方式,模板函式show2()為非遞迴呼叫方式。一般來說,遞迴呼叫方式安全可控,而非遞迴呼叫方式呼叫次數比較難以控制。

《c++ primer plus》(第6版)中文版  827-831頁(參考:可變引數模板函式)

參考:非遞迴展開方式)

C 可變引數模板

c 可變引數模板 flyfish c 98版本不支援 c 11版本以上支援 arguments 是引數包 parameter pack 類 classname 可以接受可變引數個數 template class custom tuple custom tuple c1 custom tuple c2...

c 可變引數模板

可變模板引數函式 1.逗號表示式展開引數包 templatevoid expand const f f,args.args expand auto i 1,2.0,test 2.遞迴函式方式展開 template void printarg t t 終止遞迴 templatevoid process...

C 可變引數模板

乙個可變引數模板 variadic template 就是乙個接受可變數目引數的函式模板或類模板。可變數目的引數被稱為引數包 parameter packet 存在兩種引數包 模板引數包 template parameter packet 表示0個或多個模板引數 函式引數包 function par...