温馨提示×

C++可变参数模板如何定义

c++
小樊
81
2024-11-09 08:58:40
栏目: 编程语言

在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的构造函数。

0