C++ 可变参数模板来接收参数 提示 oo many arguments to function call, expected 2, have 5
时间: 2024-01-19 09:04:37 浏览: 217
这个错误提示可能是由于你的可变参数模板定义的函数参数数量少于你实际传递的参数数量导致的。
举个例子,如果你定义了下面这个可变参数模板函数:
```c++
#include <iostream>
#include <string>
template<typename... Args>
void printArgs(const std::string& separator, Args... args)
{
std::cout << args... << std::endl;
}
```
然后尝试用下面这个语句调用它:
```c++
printArgs(", ", "Hello", "world", "!");
```
你会得到一个类似于 "too many arguments to function call, expected 2, have 5" 的错误提示。这是因为在调用 `printArgs` 函数时,你传递了 3 个参数,但是 `printArgs` 函数的形参列表只有两个参数(一个是 `const std::string& separator`,另一个是 `Args... args`)。
解决这个问题的方法是在函数模板的形参列表中添加一个额外的参数,来接收多余的参数。例如,我们可以这样修改上面的 `printArgs` 函数:
```c++
template<typename... Args>
void printArgs(const std::string& separator, Args... args, const Args&... others)
{
std::cout << args << separator;
printArgs(separator, others...);
}
```
这样,我们就可以在函数调用时传递任意数量的参数了,而且不会出现上面的错误提示。
阅读全文