在 C++ (Arduino) 中传递带有参数的函数作为参数
Passing a function with arguments as an argument in C++ (Arduino)
我想为我的类编写一种包装函数...我真的不知道该怎么做!
看,我想要一个,比如说,run()
函数,接受一个函数作为参数,这是容易的部分。 用法是这样的
void f() { }
void run(int (*func)) {
//whatever code
func();
//whatever code
}
run(f);
这应该只运行f()
功能,对吧?
但是,如果f()
需要论据呢?假设它被声明为f(int i, int j)
,我会重写run()
函数以单独接受这些int
,并将它们传递给f()
函数。
但是我希望能够将任何函数传递给run()
,无论有多少参数或它们是什么类型。意思是,最后,我想得到类似于我所期望的假设的用法
void f() {int i, int j}
void v() {char* a, int size, int position}
void run(int (*func)) {
//whatever code
func();
//whatever code
}
run(f(1, 2));
run(v(array, 1, 2));
要做。我知道这看起来很愚蠢,但我想我的意思是。
我该怎么做?
请记住,这是arduino-c++,所以它可能缺少一些东西,但我相信有一些库可以弥补这一点......
如果您有权访问std::function
那么您可以使用它:
void run(std::function<void()> fn) {
// Use fn() to call the proxied function:
fn();
}
您可以使用 lambda 调用此函数:
run([]() { f(1, 2); });
Lambda 甚至可以从其封闭作用域中捕获值:
int a = 1;
int b = 2;
run([a, b]() { f(a, b); });
如果您没有std::function
但可以使用lambda,则可以run
模板函数:
template <typename T>
void run(T const & fn) {
fn();
}
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类