C 的可變引數模板函式

2022-05-08 21:48:06 字數 827 閱讀 7823

可變引數模板函式寫法:

模板引數裡寫typename... args,表明args是乙個可變引數。

之後再函式引數裡args後面也要加...,以表示該引數為可變引數。

函式引數中對於args的修飾,會擴充套件到所有該args的引數,比如下面**:

//

可變引數模板函式使用方法1:遞迴呼叫,每次將可變引數規模變小直到為0

templatevoid print(const t&x)

template

void print(const t& x, const args&... rest)

如果呼叫:int i=1,j=2,k=3;那麼實際print(i,j,k)呼叫的是:print(const int& i,const int& j,const int& k);

//

可變引數模板函式使用方法2:迴圈呼叫

templatevoid print2(args&&... li) )

}int

main()

另外據c++primer上說,可變引數模板函式一般用來將它的引數**給其他函式,比如:

templatevoid

do_something(args... arg_list)

template

void f(args&&... arg_list)

intmain()

正好複習下**:

f函式實際呼叫的樣子是這樣的:

可以看到完美**的強大之處。。。所有的const、左右值、引用/指標性質全部原封不動**給了do_something函式。

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...