Standard-funktionen for_each ser ut ungefär så här:
template<class Iter, class FuncType>
inline FuncType for_each(Iter First, Iter Last, FuncType Func)
{
for (; First != Last; ++First)
Func(*First);
return (Func);
}
Men vore det inte bättre om såg ut så här?
template<class Iter, class FuncType>
inline FuncType for_each(Iter First, Iter Last, FuncType[B]&[/B] Func)
//samma i övrigt
Alltså den sista parametern skickas som referens.
Det gör denna kod möjlig:
struct Sum
{
Sum(){sm = 0;}
void operator() (int s){sm += s;}
int sm;
};
int main()
{
vector<int> v;
v.push_back(2);
v.push_back(5);
v.push_back(9);
Sum s;
for_each(v.begin(),v.end(),s);
cout << s.sm;
}