我有类似下面的结构。这是一个在其所有元素上调用回调的容器。 fct
可以是lambda,函子或普通函数指针。
现在,在某些情况下,我想在调用它之前先选择配置fct
。例如,fct
在每个x上计算一个复杂的函数。但是ContainerX
已经知道中间结果了-我想告诉fct
中间结果。如果fct
是函子,则它具有状态并且可以存储中间结果。如果它是普通函数,则不能存储中间结果,应该在没有预配置的情况下调用它。
class ContainerX{
void callback(function<void(X* x)> fct){
// 1. Tell fct the intermediate result, if it is able to be configured
// 2. Call fct for all x in the container
}
}
基本上有很多方法可以做到这一点:
fct
定义为function<void(X* x, double result)>
fct
定义为具有实际功能和预配置功能的抽象类。 但是这些解决方案要求我更改
callback
的签名,使我无法再使用普通函数和函子来调用它。有没有办法透明地配置
fct
? 最佳答案
我会使用callback
参数创建result
重载。它看起来像这样:
class ContainerX{
void callback(function<void(X* x)> fct){
}
void callback(function<void(X* x, double result)>){
}
}
本质上有两个不同的回调函数。一个使用中间值的函数。一个没有。有时您需要不同的签名来完成大致相同的操作。这就是重载的目的:)。
关于c++ - 透明地配置std::function/lambda回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30344211/