将 std::function 的参数作为参数提供给新对象的前向参数

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

本文关键字:参数 对象 新对象 function std      更新时间:2023-10-16

这是我的问题:我想创建一个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::getOriginalInputEvent中检索。

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

根据我们在聊天中的讨论,我相信您正在寻找以下内容:

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