編寫可變引數函式模板

2021-07-02 03:08:08 字數 617 閱讀 3177

我們可以使用乙個initializer_list來定義乙個可接受可變數目實參的函式。但是,所有實參必須具有相同的型別(或它們的型別可以轉換為同乙個公共型別)。

可變引數函式通常是遞迴的。第一步呼叫處理包中的第乙個實參,然後用剩餘實參呼叫自身。

// 用來終止遞迴並列印最後乙個元素的函式

// 此函式必須在可變引數版本的print定義之前宣告

template t>

ostream& print(ostream& os, const t& t)

// 包中除了最後乙個元素之外的其他元素都會呼叫這個版本的print

template t, typename ... args>

ostream& print(ostream& os, const t& t, const args& ... rest)

return print(os, rest…);此呼叫只傳遞了兩個實參。其結果是rest中的第乙個實參被繫結到t,剩餘實參形成下乙個print呼叫的引數包。

當定義可變引數版本的print時,非可變引數版本的宣告必須在作用域中。否則,可變引數版本會無限遞迴。

通用函式可變引數模板

通用可變引數模板 處理不限定個數的引數,處理不同型別 設計可以修改原來的資料的 t value,args args 設計可以修改副本 t value,args args 設計不可以可以改原來的資料不可以修改副本 const t value,const args args 設計引用原來的資料不可以修改...

可變長函式引數模板

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

可變引數模板

乙個可變引數模板就是乙個接受可變數目引數的模板函式或模板類。可變數目的引數被稱為引數包 parameter packet 存在兩種引數包 模板引數包 template parameter packet 表示零個或多個模板引數 函式引數包 function parameter packet 表示零個或...