Funktion mit Parametern als Parameter



  • Hallo!

    Ich habe eine Funktion die ich aufrufe und der ich eine andere Funktion als Argument übergebe - um die Ausführungszeit zurückzugeben:

    template<typename func> long dur(func function){
    
    	long start=GetTickCount();
    
    	function();
    
    	return GetTickCount()-start;
    
    }
    

    Diese rufe ich dann mit irgendeiner parameterlosen Funktion auf.

    int main(){
    
     dur(foo);
    
     return 0;
    }
    

    Nun würde ich auch gerne Funktionen aufrufen denen ich Parameter mitgeben kann...
    Also

    int main(){
    
     int a,b;
     ...
     dur(foo(a,b));
    
     return 0;
    }
    

    Meine Frage ist nun wie ich das bewerkstelligen kann, denn ich erhalte logischerweise den Fehler

    error C2064: Ausdruck ergibt keine Funktion, die 0 Argumente übernimmt

    für den Aufruf von function() in der Funktion dur.

    Danke im Voraus

    MfG



  • Falls du offen für std::tr1 oder boost bist, damit geht das alles einfacher:

    template<typename Func>
    long dur(Func function)
    {
        long start=ugly_windows_get_tick_count();
        function();
        return ugly_windows_get_tick_count()-start;
    }
    
    int main()
    {
        dur(std::tr1::bind(foo, a, b));
        // return 0 brauchts nicht
    }
    


  • typedef void(*pt2Func)(float, float)
    


  • moll->dur schrieb:

    int main()
    {
        ...
        // return 0 brauchts nicht
    }
    

    Bitte?
    Ein Funktion mit Rückgabe-Typ gibt immer etwas zurück, es sei denn du
    wirst eine Exception!



  • wenn nicht anders angegeben gibt main stets 0 zurueck.



  • Bitte? schrieb:

    moll->dur schrieb:

    int main()
    {
        ...
        // return 0 brauchts nicht
    }
    

    Bitte?
    Ein Funktion mit Rückgabe-Typ gibt immer etwas zurück, es sei denn du
    wirst eine Exception!

    Das stimmt, nur gibt main 0 zurück, wenn nicht anders angegeben. Es ist die einzige Funktion, in der das return implizit geschehen darf, d. h.

    int foo()
    {
        // return 0;    // darf nicht weggelassen werden
    }
    
    int main()
    {
        cout << foo();    // undefiniert
        // return 0;      // hier darf es weggelassen werden
    }
    

Anmelden zum Antworten