C 學習筆記 可變引數模板

2021-10-18 03:41:06 字數 1410 閱讀 1771

可變引數模板的用法

可變引數模板也就是模板引數數目和型別可變,我們用引數包來傳遞多個可變的引數。我們用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...