Frage zu Function Objects
-
Ich hab mir gerad mal folgendes Beispiel bei sgi.com angesehen:
struct adder : public unary_function<double, void> { adder() : sum(0) { } void operator()(double x) { sum += x; } double sum; }; int main() { vector<double> V; // V mit irgendwas füllen adder result = for_each(V.begin(), V.end(), adder()); cout << "The sum is " << result.sum << endl; }
Mir will einfach nicht in den Kopf, warum ausgerechnet das adder::sum der Instanz result das Ergebnis erhält. Ist sum wegen irgendwas automatisch static oder wie?
Naja, vielleicht isses nur schon zu spät...Danke im Voraus...
-
Cocaine schrieb:
Mir will einfach nicht in den Kopf, warum ausgerechnet das adder::sum der Instanz result das Ergebnis erhält.
Weil du es ihm zuweist.
for_each returned das Objekt, dass du ihm übergibst - bzw. eigentlich nur eine Kopie.ist es vielleicht so klarer:
template<typename Iter, class Func> Func for_each(Iter first, Iter last, Func func) { while(first!=last) { func(*first); ++first; } return func; }
for_each zaubert ja nicht...
-
for_each returned das Objekt, dass du ihm übergibst
Und ist in diesem Punkt btw. ein Unikat.
-
OK, wenn ihr mir jetzt nur noch bestätigt, daß das
adder result = for_each(V.begin(), V.end(), adder()); // hier der Konstruktor?! ---^
ist, hab ich's gerafft, denk ich.
-
Du hast es 'gerafft'
-
(sagt man Hessen halt so
)
Ok, big thx!