我想编写一个函数,该函数在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()函数(我们仅实现了一个带有三个参数的函数),因此链接器会抱怨。预期的结果是该函数不会遇到此问题,而不必每次都对不同的参数集编写不同的函数以对其执行操作。
您需要定义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或更高版本。