温馨提示×

C++可变参数模板怎样设置

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

在C++中,可变参数模板允许您创建接受任意数量参数的函数或类。要设置可变参数模板,请遵循以下步骤:

  1. 在函数或类的声明之前,使用template<...>指定模板参数包(parameter pack)。
  2. 在模板参数包内部,使用省略号...表示参数包。
  3. 在函数或类内部,使用递归模板展开(recursive template expansion)或可变参数模板展开(variadic template expansion)处理参数包。

下面是一个简单的可变参数模板示例,用于计算给定参数的和:

#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的可变参数模板函数,它接受任意数量的参数包。然后,我们使用可变参数模板展开处理参数包,计算所有参数的和。

0