可變引數模板的用法
可變引數模板也就是模板引數數目和型別可變,我們用引數包來傳遞多個可變的引數。我們用class…和typename…來表示乙個引數包,引數包表示零個或者多個引數的列表。
/*
args 表示乙個模板引數包,rest表示乙個函式模板引數包
*/template.. args>
void
fun(
const t &t,
const args &..
.rest)
;int i=10;
double d=
5.0;
string s
(hello)
;fun
(i,s,
49,d)
;//包中有三個引數s,49,d
fun(s,i,d)
;包中有兩個引數i,d
fun(s)
;//空包
sizeof…()
sizeof…()函式返回函式引數包或者模板引數包中的引數的數量。
可變引數模板例項
可變引數模板通常是用於遞迴函式的,我們將編寫乙個函式依次輸出引數包中的各個資料,我們採用遞迴的方式經輸出,首先定義乙個普通的引數模板作為遞迴函式的出口,遞迴出口要定義在可變引數模板的前面。
//遞迴函式出口,需要定義在可變引數模板的前面
template
ostream&
print
(ostream &os,
const t &t)
//可變引數模板,
template.. args>
ostream&
print
(ostream &os,
const t &t,
const args&..
. rest)
intmain()
template..args>
ostream&
erromsg
(ostream &os,
const args&..
.rest)
對之前的例子做出如上的兩個函式模板的宣告。現在我們可以進行如下的操作:
int
main()
上述的erromsg(cout,i,s,42);相當於呼叫
print(cout,debug_rep(i),debug_rep(s),debug_rep(42));
上述案例中的print(os,debug_rep(rest)…)相當於對引數包rest中的每個引數呼叫debug_rep();
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...