Methodenvorlage



  • Hallo zusammen,

    ich stehe gerade etwas auf dem Schlauch.
    Ich habe einen Haufen an Methoden welche ständig im Team um weitere Methoden erweitert werden. Für jede Methode gibt es einen "Prolog" und einen "Epilog".

    sieht irgendwie so aus:

    void bla(bla bla, ....)
    {
    //Jede Menge Zeugs was am Anfang passiert(Prolog)

    // Hier kommt der übliche Code rein

    //Jede Menge Zeug was am Ende passiert(Epilog)
    }

    Wie kann ich in C++ so eine Art Vorlage erstellen?



  • Das klingt so als wäre der Prolog und Epilog einfach nur copy&paste und somit ohnehin doppelter code der eigentlich in eigene Funktionen gehört?

    Was genau passiert denn eigentlich bei deinem Prolog und Epilog das der für jede einzellne Funktion notwendig ist?



  • Berechtigte Frage. Es wird ein bisschen was mit protokolliert, Ausführungszeiten erfasst usw.
    Ich weiß den alternativen Weg zu schätzen aber das war nicht meine eigentliche Frage;-)
    Wäre super wenn man bei der Lösung des Problems bleiben könnte


  • Mod

    template<typename Function> boilerplate_caller(Function f)
    {
      // Prolog
      f();
      // Epilog
    }
    

    Damit dann

    void user_interface(int a, int b, int c)
    {
      boilerplate_caller(std::bind(actual_function, a, b, c));
    }
    

    Gibt auch noch andere Methoden, aber so hast du überhaupt mal einen Ansatz.



  • Noch ein Ansatz.

    struct whatever{
      whatever() {
        // prolog
      }
      ~whatever() {
        // epilog
      }
    };
    
    void whocares() {
      whatever _; // nicht unuebliche benamsung von objekten, die man eh nicht braucht...
      f();
    }
    


  • Danke schon mal für die Vorschläge aber zum letzten habe ich eine Frage.

    Ich komme ursprünglich aus der .NET Welt und stelle mir nun die Frage, ob es sinnvoll ist, gerade bei Zeitmessungen, sich auf den Destruktor zu verlassen.
    Ich weiß gerade nicht wie es bei C++ ist. Wird der Destruktor direkt aufgerufen(ich muss ihn explizit aufrufen) oder wird er irgendwann mal aufgerufen wenn ich den expliziten Aufruf vergesse?



  • Ja, in C++ wird der Destruktor deterministisch dann aufgerufen, wenn ein Object out-of-scope geht.



  • secondsun schrieb:

    Wird der Destruktor direkt aufgerufen(ich muss ihn explizit aufrufen) oder wird er irgendwann mal aufgerufen wenn ich den expliziten Aufruf vergesse?

    Du solltest den Destruktor auf keinen Fall selbst aufrufen. Danach wäre das Objekt nämlich bereits zerstört. Es dann nochmal zu zerstören wäre ein Fehler. (Und da lokale Objekte automatisch zerstört werden, würde es dann eben 2x zerstört, was wie gesagt ein Fehler wäre.)


Anmelden zum Antworten