Frage zu Lambda Funktionen



  • Hi,

    ich lese mich gerade in die neuen Features von C++0x ein und habe nun eine Frage zu Lambdas. Folgende Situation.

    std::vector<int> someList;
    int total = 0;
    std::for_each(someList.begin(), someList.end(), [&total](int x) {
      total += x;
    });
    std::cout << total;
    

    std::for_each erwartet als dritten Parameter ja eine Klasse, aber nun steht da eine Lambda Funktion. Meine Frage ist als was eine Lambda Funktion behandelt wird, wenn man sie an eine Funktion übergibt. Wird ein Funktionszeiger übergeben oder ein "lambda object"?



  • Spielt keine Rolle, da for_each ein Template ist und nur der Aufruf T( ... ) relevant ist. Alles andere uebernimmt der Kompiler.



  • Das hatte ich auch gedacht, allerdings bekomme ich bei folgendem Code Fehler.

    template< class t >
    void print(  t )
    {
    	t();
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	print([]( ){ std::cout << "hallo";});
    
    	return( 0 );
    }
    

    t ist ein Template Parameter und der Compiler sollte doch merken, dass es eine lambda Funktion ist.

    Fehler:

    error C3497: you cannot construct an instance of a lambda
    


  • So vielleicht?

    template< class F>
    void print(  F & f )
    {
    	f();
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	print([]( ){ std::cout << "hallo";});
    
    	return( 0 );
    }
    


  • Vielen Dank 🙂


Anmelden zum Antworten