这是我的问题:我想创建一个std::function
对象,它将提取"提取"它的一部分参数并将其传递给另一个std::function
对象。
我需要这样的功能:
std::function<void(Event)> MakeEventCallback(std::function<void(std::shared_ptr<Input>&)>);
调用这个潜在的功能:
some_global_callbacks.push_back(MakeEventCallback(
[](std::shared_ptr<Input>& input){ /*do stuff with input object;*/ input->DoStuff();}
));
some_global_callbacks
最终会像这样处理:
auto event = createEvent(...);
for (auto eventCallback : some_global_callbacks)
{
eventCallback(event);
}
Event
的构造函数带有std::shared_ptr<Input>
,也可以使用Event
从Event::getOriginalInput
检索。
我希望调用eventCallback
以适当的输入调用传递给callback
的原始MakeEventCallback
。
答案 0 :(得分:1)
根据我们的discussion in chat,我相信你正在寻找这个:
std::function<void(Event&)> MakeEventCallback(std::function<void(std::shared_ptr<Input>&)> callback)
{
return [callback](Event& ev) { callback(ev.getOriginalInput()); };
}
这会创建一个“包装”回调,它会带Event
,从Input
中提取Event
,并将Input
传递给原来的callback
}。