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!


Anmelden zum Antworten