mam w istocie następujący kod:Wywołanie std :: funkcja w 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));
Zastosowanie ExecuteGlobal czuje się całkowicie zbędny tutaj, ale nie mogę znaleźć właściwą składnię odpaść telefon.
std::for_each(triggers.begin(), triggers.end(), ExecuteGlobal(_1));
std::for_each(triggers.begin(), triggers.end(), std::bind(_1));
Obie nie kompilują się.
Jest też bardziej złożona sprawa:
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));
Czy można zrobić bez funkcji pomocniczych w tych sprawach?
Możesz rzucić okiem na nową składnię 'for' w najnowszym standardzie C++ (C++ 11): http://en.wikipedia.org/wiki/C%2B%2B11#Range -based_for-loop – lvella
Dla twojego pierwszego przykładu, rzeczą, która jest zbędna jest użycie std :: bind: 'std :: for_each (triggers.begin(), triggers.end(), ExecuteGlobal);' –
@ benjamin-lindley : dziękuję, wróciłem z bardziej złożonej sprawy i straciłem tam dodatkową nadmiarowość! –