将 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::getOriginalInput
从 Event
中检索它。
我希望 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
.
这是我的问题:我想创建一个 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::getOriginalInput
从 Event
中检索它。
我希望 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
.