在C++中,可變參數模板允許您創建接受任意數量參數的函數或類
#include <iostream>
// 定義一個可變參數模板函數
template <typename... Args>
void print_args(Args... args) {
(std::cout << ... << args) << std::endl; // C++17 折疊表達式
}
int main() {
print_args(1, 2, 3); // 輸出: 123
print_args("Hello, ", "World!"); // 輸出: Hello, World!
return 0;
}
在這個例子中,我們定義了一個名為print_args
的函數模板,它接受任意數量的參數(Args... args
)。然后我們使用C++17的折疊表達式((std::cout << ... << args)
)將這些參數打印到控制臺。
對于類模板,您可以使用類似的方法定義可變參數模板類。這里有一個簡單的例子:
#include <iostream>
#include <tuple>
// 定義一個可變參數模板類
template <typename... Args>
class MyTupleWrapper {
public:
std::tuple<Args...> tuple;
MyTupleWrapper(Args... args) : tuple(args...) {}
};
int main() {
MyTupleWrapper<int, double, std::string> my_tuple_wrapper(42, 3.14, "C++");
auto &[i, d, s] = my_tuple_wrapper.tuple;
std::cout << "i: "<< i << ", d: "<< d << ", s: "<< s << std::endl; // 輸出: i: 42, d: 3.14, s: C++
return 0;
}
在這個例子中,我們定義了一個名為MyTupleWrapper
的類模板,它接受任意數量的類型參數(Args... Args
),并將它們存儲在一個std::tuple
中。構造函數接受這些參數并將它們傳遞給std::tuple
的構造函數。