在C++中,可變參數(shù)模板允許您創(chuàng)建接受任意數(shù)量參數(shù)的函數(shù)或類。要設(shè)置可變參數(shù)模板,請遵循以下步驟:
template<...>
指定模板參數(shù)包(parameter pack)。...
表示參數(shù)包。下面是一個簡單的可變參數(shù)模板示例,用于計算給定參數(shù)的和:
#include <iostream>
// 聲明可變參數(shù)模板函數(shù)
template<typename T, typename... Args>
T sum(T first, Args... rest);
// 定義可變參數(shù)模板函數(shù)
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
的可變參數(shù)模板函數(shù),它接受一個類型為T
的參數(shù)和一個參數(shù)包Args... rest
。然后,我們使用遞歸模板展開處理參數(shù)包,計算所有參數(shù)的和。
請注意,這個示例僅適用于單個參數(shù)包的情況。如果您需要處理多個參數(shù)包,可以使用可變參數(shù)模板展開,如下所示:
#include <iostream>
// 聲明可變參數(shù)模板函數(shù)
template<typename... Packs>
auto sum_all(Packs... packs) -> decltype(packs...);
// 定義可變參數(shù)模板函數(shù)
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
的可變參數(shù)模板函數(shù),它接受任意數(shù)量的參數(shù)包。然后,我們使用可變參數(shù)模板展開處理參數(shù)包,計算所有參數(shù)的和。