我想传递一个带有参数的回调函数:
class foo1{
foo1(void (*callback)(float));
};
foo1::foo1(void (*callback)(float)){
//excecute the callback at some point
}
float foo2(){
return 1.1;
}
void foo3(float f){
//do stuff with f
return;
}
int main(){
void (*p3)(float);
//p3 is a pointer to a function that returns void and has a single float as input
p3 = &foo3(foo2());
//p3 now points to foo3 wich fits the requirements. But it does not make sence to give that pointer an argument.
foo1(p3);
return 0;
}
有几个错误和 我明白这不会有所作为。 (参见代码中的注释)但我不知道如何正确地做到这一点。我想传递一个函数作为回调,其输入值为foo2。
答案 0 :(得分:1)
你可以使用lambda来做到这一点 这种方式应该有效:
struct foo1{
template<typename F>
foo1(F f) {
//excecute the callback at some point
f();
}
};
float foo2(){
return 1.1;
}
void foo3(float){
//do stuff with f
return;
}
int main(){
foo1([param{foo2()}](){ foo3(param); });
}
考虑这个表达式:
[param{foo2()}](){ foo3(param); }
它创建一个类型为void(void)
的可调用对象,这是你在foo2
的第一个参数(右边?)处应用foo3
执行结果所期望的。<登记/>
这就是为什么你可以在f()
的构造函数中简单地将其作为foo1
调用。
答案 1 :(得分:1)