Beste Art für eine Wohnung von Hilfsfunktionen



  • Ich habe Hilfsmethoden, die von mehreren Klassen in verschiedenen cpps benutzt werden und die keine Informationen von Klassen benötigen.

    Wo "wohnen" diese am besten, was ist am saubersten?
    Was ist am günstigsten für den Compiler?

    • als freie Funktionen in einer cpp
    • in einem Namespace, in einer cpp
    • als Static definieren, in einer cpp
    • in einem Header?
    class A {
      void calc(){
        Hilfsfunction();
    }
    };
    class B {
    void calc(){
        Hilfsfunction();
    }
    };
    double Hilfsfunction(){
    };
    

    Vielen Dank.



  • Eine Meinung von Titus Winters:
    https://abseil.io/tips/186

    Ich pack sie aber trotzdem gerne zu den private membern.
    Wenn frei in cpp, dann in namenlosen namespace.

    In einen extra header erst wenn du sie auch woanders brauchst. Weil prinizpiell würde ich sagen, so nah an den code wo es gebraucht wird wie schmerzlos möglich.


  • Mod

    Könnte 1,2, oder 4 sein (für 3 sehe ich keine Argumente). Kommt halt drauf an. Worauf?

    • 1 vs 2: Willst du Namespaces haben? Für komplexe Projekte kann es nützlich sein, für viele Projekte ist es unnötiger Overhead. Ansonsten technisch kein Unterschied.
    • 1,2 vs 4 ist da interessanter, als da es einen echten technischen Unterschied machen kann. Bei 4 macht man dem Compiler Inlining einfacher, bzw. stiftet ihn geradezu dazu an. Was manchmal gewünscht ist, manchmal nicht. Faustregel ist, dass kurze Trivialfunktionen eher zu 4 gehören, andere nicht. Außerdem macht es einen wesentlichen Unterschied beim Buildprozess, nämlich dass bei Änderungen an der Hilfsfunktion bei Option 4 alle abhängigen Nutzer neu compiliert werden müssen, bei 1 und 2 nur die Funktion selber. Daher ist auch relevant, wie sehr die Funktion weiterer Entwicklung und Änderungen unterliegt. Was aber oft auch mit Länge und Komplexität korreliert, und da sprechen lange, komplexe Funktionen ja auch bereits für 1 oder 2.

Log in to reply