在C++中,可變參數模板允許您創建接受任意數量參數的函數或類。要設置可變參數模板,請遵循以下步驟:
template<...>指定模板參數包(parameter pack)。...表示參數包。下面是一個簡單的可變參數模板示例,用于計算給定參數的和:
#include <iostream>
// 聲明可變參數模板函數
template<typename T, typename... Args>
T sum(T first, Args... rest);
// 定義可變參數模板函數
template<typename T, typename... Args>
T sum(T first, Args... rest) {
return first + sum(rest...);
}
int main() {
int a = 1;
double b = 2.0;
char c = '3';
std::cout << "Sum: " << sum(a, b, c) << std::endl; // 輸出:Sum: 6
return 0;
}
在這個例子中,我們聲明了一個名為sum的可變參數模板函數,它接受一個類型為T的參數和一個參數包Args... rest。然后,我們使用遞歸模板展開處理參數包,計算所有參數的和。
請注意,這個示例僅適用于單個參數包的情況。如果您需要處理多個參數包,可以使用可變參數模板展開,如下所示:
#include <iostream>
// 聲明可變參數模板函數
template<typename... Packs>
auto sum_all(Packs... packs) -> decltype(packs...);
// 定義可變參數模板函數
template<typename... Packs>
auto sum_all(Packs... packs) -> decltype(packs...) {
return (packs + ...);
}
int main() {
int a = 1;
double b = 2.0;
char c = '3';
std::cout << "Sum all: " << sum_all(a, b, c) << std::endl; // 輸出:Sum all: 6
return 0;
}
在這個例子中,我們聲明了一個名為sum_all的可變參數模板函數,它接受任意數量的參數包。然后,我們使用可變參數模板展開處理參數包,計算所有參數的和。