std :: function的前向参数作为新对象的参数给出

时间:2017-02-21 10:47:26

标签: c++ c++11 std-function

这是我的问题:我想创建一个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>,也可以使用EventEvent::getOriginalInput检索。

我希望调用eventCallback以适当的输入调用传递给callback的原始MakeEventCallback

1 个答案:

答案 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 }。