将 std::function 的参数作为参数传递给新对象

Forward arguments of std::function given as an argument to new object

这是我的问题:我想创建一个 std::function 对象,它将 "extract" 其参数的一部分传递给另一个 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::getOriginalInputEvent 中检索它。

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

根据我们的 discussion in chat,我相信您正在寻找这个:

std::function<void(Event&)> MakeEventCallback(std::function<void(std::shared_ptr<Input>&)> callback)
{
  return [callback](Event& ev) { callback(ev.getOriginalInput()); };
}

这将创建一个“包装器”回调,它采用 Event,从 Event 中提取 Input,并将 Input 传递给原始 callback.