Code in Header-Datei auslagern



  • Ist so etwas hier eigentlich üblich?

    class Something
    {
    public:
    
        #include "Constructors.h"
        #include "ImportantFunctions.h"
    
    private:
    
        #include "Helpers.h"
        #include "StaticFunctions.h"
    };
    

    Das wäre dann so etwas wie Partial Classes in C#. Wäre vielleicht sinnvoll, wenn man Template-Klassen hat, wo man die Funktionsdefinition nicht in CPP-Dateien auslagern kann.

    Gibt es sowas wirklich oder ist das eher Zweckentfremdung?



  • 😮
    Ist sowas überhaupt möglich? Noch nie gesehen....

    gruß
    syntax



  • Möglich ist das wohl schon - #include macht ja nur Textersetzung - aber gesehen habe ich so was bisher nicht, und ich würde auch niemanden einstellen, der so etwas schreibt. In der Regel dürfte CRTP ein sinnvollerer Ansatz sein, und ggf. sind Mixins einen Blick wert.

    Ansonsten nehme ich an, dass du mit "Template-Klassen" Klassen-Templates bzw. Klassenvorlagen meinst.



  • Üblich würde ich nicht unbedingt sagen, möglich durchaus.
    Ich würde die eingebundenen Sourcen aber nicht mit .h Endungen bezeichnen, das wäre irreführend, weil es sich eben nicht um eigentliche Header in dem Sinne handelt sondern nur um Codebrocken.

    Wo ich sowas schon gesehen habe:
    - bei generierten Codebrocken (wenn man nicht den Rest des Headers durch den Generator jagen wollte)
    - In der MSVC2010 Standard-Lib, wo der selbe Codebrocken mehrfach eingebunden wird - mit unterschiedlichen Werten für ein Makro und dadurch unterschiedlichen Auswirkungen. Allgemein sorgt das über einen etwas komplizierteren Mechanismus dafür, dass MSVC's fehlende Unterstüzung für variadic Templates etwas ausgebügelt wird. Beispielsweise steht in <xxshared> der Code für make_shared, der N mal eingebunden wird und dadurch N Versionen von make_shared für 0..(N-1) Parameter definiert.



  • Welche Dateiendungen werden für solche Art der Einbindung eigentlich typischerweise benutzt?



  • Wahnsinniger schrieb:

    Welche Dateiendungen werden für solche Art der Einbindung eigentlich typischerweise benutzt?

    Da solche Einbindungen nicht typisch sind, gibts auch keine typischen Endungen dafür. Du solltest nur Endungen vermeiden, die typischerweise für was anderes benutzt werden (z.B. für "echte", vollständige Header). MSVC benutzt garkeine Endungen und kennzeichnet interne Header, die nicht für den Gebrauch durch Fremde gedacht sind, mit einem oder zwei führenden 'x' (z.b. <xmemory>, <xxshared>)
    Bei altem Code hier in der Firma habe ich schon .fo (für "Formel") und .inc gesehen. Tob dich aus 😉


Anmelden zum Antworten