私は基本的に次のコードを持っている:のInvokeのstd ::機能:: for_each
typedef std::function<void()> fnGlobalChangeEvent;
typedef std::vector<fnGlobalChangeEvent> GlobalTriggers;
inline void ExecuteGlobal(fnGlobalChangeEvent ev)
{
ev();
}
GlobalTriggers triggers;
std::for_each(triggers.begin(), triggers.end(), std::bind(&ExecuteGlobal, _1));
がExecuteGlobalの使用は、ここで完全に冗長な感じを、私はドロップアウトする権利構文を見つけることができません呼び出し。
std::for_each(triggers.begin(), triggers.end(), ExecuteGlobal(_1));
std::for_each(triggers.begin(), triggers.end(), std::bind(_1));
どちらもコンパイルできません。
より複雑な場合もあります:
typedef std::function<void (Zot&)> fnChangeEvent;
typedef std::vector<fnChangeEvent> Triggers;
inline void Execute(fnChangeEvent ev, Zot& zot)
{
ev(zot);
}
Triggers triggers;
std::for_each(triggers.begin(), triggers.end(), std::bind(&Execute, _1, zot));
それはこれらのケースではヘルパー関数なしで行うことは可能ですか?
最新のC++標準(C++ 11)の新しい 'for'構文を見てみるといいでしょう:http://en.wikipedia.org/wiki/C%2B%2B11#Range -based_for-loop – lvella
最初の例では、冗長なのは、std :: bindを使用することです:std :: for_each(triggers.begin()、triggers.end()、ExecuteGlobal); ' –
@ benjamin-lindley :ありがとう、私はより複雑なケースから戻ってきて、余分な冗長性を欠いていた! –