我想为我的类写一个类似包装器的函数...我真的不知道该怎么做!
我想要一个,比方说,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++,所以它可能缺少一些东西,但我相信有一些库可以弥补这一点……
发布于 2020-06-08 23:51:46
如果你有权访问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();
}
https://stackoverflow.com/questions/62265975
复制相似问题