2017-02-21 14 views
0

これは私の問題です:std::functionオブジェクトを作成して引数の一部を抽出し、それを別のstd::functionオブジェクトに渡したいと思います。新しいオブジェクトへの引数として与えられたstd :: functionの前方引数

私はこのような機能を必要とする

:このポテンシャル関数へ

std::function<void(Event)> MakeEventCallback(std::function<void(std::shared_ptr<Input>&)>); 

コール:Eventのコンストラクタがかかる

auto event = createEvent(...); 
for (auto eventCallback : some_global_callbacks) 
{ 
    eventCallback(event); 
} 

some_global_callbacks.push_back(MakeEventCallback(
    [](std::shared_ptr<Input>& input){ /*do stuff with input object;*/ input->DoStuff();} 
)); 

some_global_callbacksが最終的に、このように処理され、 std::shared_ptr<Input>であり、ret EventからEvent::getOriginalInputを使用してください。

eventCallbackの呼び出しで、適切な入力でMakeEventCallbackに渡された元のcallbackを呼び出すようにします。

+0

私はあなたの質問をよく理解できません: 'std :: function'オブジェクトに引数が含まれていません。引数は、ストアドファンクションが呼び出された時点で 'std :: function :: operator()'に渡されます。あなたは後になっていることを明確にすることができますか? – Angew

+0

MakeEvent関数に渡されたlambdaが呼び出され、後でlambaで指定された引数を使用して、そのコンストラクタで同じ型の引数を取るEventオブジェクトを返すようにします。 – trexgris

+0

'MakeEvent'は渡された' std :: function'を呼び出すのでしょうか?もしそうなら、それが提供するのと同じ議論を再利用することができますか?おそらくもう少しコードを表示できますか? – Angew

答えて

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を取る「ラッパー」コールバックを作成し、そのEventからInputを抽出し、Inputへを渡します元のcallback

関連する問題