C 11 14之可變參模板

2021-10-04 23:39:23 字數 1907 閱讀 5480

可變參類模板

variadic template

允許模板中有0到任意個模板引數

t

emplate<

typename..

. t>

void

myfunc

(t..

. ar**s)

myfunc()

;//0 0

myfunc(11

,23);

//2 2

myfunc(14

,12.4

,"nj",3

);//4 4

ar**s 稱為一包或者一堆引數,這些引數的型別可以各不相同。

理解t這種型別,不能看成一種型別,要看成0到多個不同型別,那對應的ar**s是不同型別的引數

t後邊帶…,稱t為可變參型別,0到多個不同型別(一包型別) ar**s,可變形參,一包形參

template

<

typename t,

typename..

. u>

void

myfunc2

(const t& ar**1,

const u&..

. otherar**)

myfunc(11

,23);

//1

myfunc(14

,12.4

,"nj",3

);//3

需要乙個引數展開函式,和乙個同名的遞迴終止函式

乙個引數+一包引數的寫法最適合引數包的展開

template

<

typename t,

typename..

. u>

void

myfunc2

(const t& ar**1,

const u&..

. otherar**s)

//遞迴終止函式

void

myfunc2()

template

<

typename..

. ar**s>

class

myclass

;//主模板

//0個引數特化版本

template

<

>

class

myclass

<

>

}template

<

typename first,

typename..

. others>

class

myclass

>

:myclass

>

first m_i;

}myclass<

int,

float

,double

> mc;

//呼叫了三次建構函式

開啟查詢 myclass<

C 11 14之可變參類模板與模板模板引數

通過tuple和遞迴呼叫展開引數包 總結模板 模板引數 組合關係 復合關係 class bclass a組合關係展開引數包案例template typename first,typename.others class myclass myclass first parf,others.paro m ...

C 11 14特性備忘

template auto add t x,u y int array for auto x array include 建構函式列表初始化 class magic magic magic std vector int v 普通函式形參 void func std initializer list ...

C 可變參模板

可變引數模板是乙個接受可變數目引數的模板函式或模板類,在模板引數列表中,typename 指出接下來的引數表示0個或多個型別的列表,乙個型別名後面跟省略號表示0個或多個給定型別的非型別引數的列表。在函式引數列表中,如果乙個引數的型別是乙個模板引數包,則此引數也是乙個函式引數包。可變引數模板通常是遞迴...