我們可以使用乙個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 表示零個或...