如何编写一个通用的或灵活的函数,该函数可以采用任意数量的参数以对它们执行指定的任务?

The*_*123 3 c++ function

我想编写一个函数,该函数在main或其他类/函数中调用时可以采用任何数字参数,以便能够在其中执行操作,每次使用自定义整数值。

例:

#include <iostream>
int add(int x, int y);

int main()
{
    std::cout << "3 + 4 + 5 = " << add(3, 4) << '\n';
    return 0;
}

int add(int x, int y, int z)
{
    return x + y + z;
}
Run Code Online (Sandbox Code Playgroud)

不链接。编译器会将前向声明的add原型与main()中对add()的函数调用进行匹配。但是,从未实现带有两个参数的add()函数(我们仅实现了一个带有三个参数的函数),因此链接器会抱怨。预期的结果是该函数不会遇到此问题,而不必每次都对不同的参数集编写不同的函数以对其执行操作。

Dmi*_*try 7

您需要定义add()函数的2个实例:一个可变参数模板化的实例和一个终止展开args的实例;

int add(int x) { return x; }        // to terminate templated add

template<typename... Args>
int add(int first, Args... rest)    // to unroll args
 { return first + add(rest...);  }

int main()
{
    std::cout << "3 + 4 = " << add(3, 4) << '\n';
    std::cout << "3 + 4 + 5 = " << add(3, 4, 5) << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

3 + 4 = 7
3 + 4 + 5 = 12
Run Code Online (Sandbox Code Playgroud)

该解决方案将需要c ++ 11或更高版本。

  • 啊,由于未及时跟进评论,皇冠被盗了)))))@Timo:干得好!))))) (2认同)