将variadic函数作为参数的函数
Function which takes variadic function as parameter
我正在尝试创建将variadic函数作为参数的函数,但是我无法弄清楚如何以适当的方式进行操作。这是我的尝试:
#include <iostream>
#include <cstdarg>
using namespace std;
int add(int args, ...) {
int res = 0;
va_list ap;
va_start(ap, args);
for(int i=0; i < args; ++i)
res += va_arg(ap, int);
va_end(ap);
return res;
}
int func(int (*func_arg)(int args, ...)) {
return func_arg; //error
}
int main() {
cout << add(2, 1, 2) << endl; //working
cout << func(add(2, 1, 2)); //error
return 0;
}
这...
func(add(2, 1, 2))
...调用函数add
,并试图将结果传递到func
中。那是通过没有演员等整数制作的指针。因此,您会遇到错误。
要传递函数本身(在适当的函数到指针转换之后(,您将执行此操作:
func(add)
但是,您对func
的实现试图通过转换功能指针来返回整数。我强烈怀疑这不是您想要的。如果您打算调用variadic函数,则可以执行此操作:
int func(int (*func_arg)(int args, ...)) {
return func_arg(2, 1, 2);
}
但这当然会硬编码论点。如果您也想允许通过参数,则需要进行一些稍微的设计更改。
说了这一切,如果您希望支持func
的呼叫者传递任何可能返回整数的东西,则可以使用库类型std::function
来实现这一目标。那么您的功能将成为这样的事情:
int func(std::function<int()> func_arg) {
return func_arg(); //Invoke the callable
}
,呼叫网站将能够使用简单的lambda适应它:
func([]{ return add(2, 1, 2); })
这将融合在一起,您似乎打算实现。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数