可變引數模板函式寫法:
模板引數裡寫typename... args,表明args是乙個可變引數。
之後再函式引數裡args後面也要加...,以表示該引數為可變引數。
函式引數中對於args的修飾,會擴充套件到所有該args的引數,比如下面**:
//如果呼叫:int i=1,j=2,k=3;那麼實際print(i,j,k)呼叫的是:print(const int& i,const int& j,const int& k);可變引數模板函式使用方法1:遞迴呼叫,每次將可變引數規模變小直到為0
templatevoid print(const t&x)
template
void print(const t& x, const args&... rest)
//另外據c++primer上說,可變引數模板函式一般用來將它的引數**給其他函式,比如:可變引數模板函式使用方法2:迴圈呼叫
templatevoid print2(args&&... li) )
}int
main()
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...