c 變長引數模板函式

2022-07-25 20:30:09 字數 1201 閱讀 1371

c++中有乙個重要特性,那就是模板型別。類似於objective-c中的泛型。c++通過類模板來實現泛型支援。

類模板,可以定義相同的操作,擁有不同資料型別的成員屬性。通常使用template來宣告。告訴編譯器,碰到t不要報錯,表示一種泛型.如下,宣告乙個普通的類模板:

template

void

foo(t a, t b)

宣告乙個模板類

template class

complex

//運算子過載

complexoperator+(complex &c)

private

: t a;

t b;

}int

main()

在模板類的繼承中,需要注意以下幾點:

template class

parent

private

: t p;

};//

如果子類不是模板類,需要指明父類的具體型別

class childone:public parent

private

:

intcone;

};//

如果子類是模板類,可以用子類的泛型來表示父類

template class childtwo:public parent

private

: t ctwo;

};

變長模板、變長引數是依靠c++11新引入的引數包的機制實現的。

具體的實現方法為:

template 

可通過sizeof...(args)統計引數包所含元素的個數。

對引數包進行處理有遞迴方式和非遞迴方式。

1 遞迴處理引數包

//

通過遞迴函式展開引數包,需要提供乙個引數包展開的函式和乙個遞迴終止函式。

//遞迴終止函式 (必須宣告在展開函式之前 )

void

debug()

//展開函式

template

void

debug(t first, args ... last)

應當注意:遞迴終止條件的函式過載,必須放在展開函式之前。 

參考:1.

2.3. 

可變長函式引數模板

include 通用可變引數模板 處理不限定個數的引數,處理不同型別 void showall 空函式,介面,最後結束遞迴 新版本編譯 強制預留介面 template 可變長度!void showall const t value,const args args 設計可以修改原來的資料的 t val...

c 11變長引數函式模板

by francis hao mar 25,2018 乙個最簡單的例項大概是這個樣子 include usingnamespacestd 變長引數函式模板宣告 template typename.t voidprint t.val 邊界條件 voidprint void 遞迴的特例化定義 templ...

變長引數模版函式初探

最開始在寫乙個 命令模組,涉及到 簡單命令 和 復合命令。所有的命令 是通過字串組裝的。命令的呼叫是通過註冊機制 實現繫結的。具體的功能封裝在對應的 功能類裡面。由於復合命令的存在,會導致一條命令 執行多個處理。所以希望在 註冊的時候,能夠直接將多個物件直接儲存到乙個容器內。這就會涉及到 不定長引數...