Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen



  • Hallo,

    im Moment habe ich glm Headerdateien in drei eigenen Headerdateien eingefügt. Wollte nun fragen, ob es gutem Programmierstil (code conventions) entspricht, wenn ich die Headerdateien Einfügungen in einer eigenen Headerdatei zusammenfasse und diese dann jeweils einfüge?

    bisher sieht es so aus:

    shaders.h

    #include <glm/vec4.hpp>
    #include <glm/mat4x4.hpp>
    #include <glm/gtc/matrix_transform.hpp>
    #include <glm/gtc/type_ptr.hpp>
    
    typedef glm::mat4 mat4;
    typedef glm::vec4 vec4;
    

    shapes.h

    #include <glm/mat4x4.hpp>
    #include <glm/geometric.hpp>
    #include <glm/trigonometric.hpp>
    #include <glm/gtc/constants.hpp>
    #include <glm/gtc/matrix_transform.hpp>
    
    #define GLM_ENABLE_EXPERIMENTAL
    #include <glm/gtx/vector_angle.hpp>
    
    typedef glm::mat4 mat4;
    

    shapes_base.h

    #include <glm/vec3.hpp>
    #include <glm/vec4.hpp>
    #include <glm/geometric.hpp>
    
    typedef glm::vec3 vec3;
    typedef glm::vec4 vec4;
    

    #include <glm/gtx/vector_angle.hpp> fügt indirekt weitere glm-Headerdateien hinzu.

    Wie würde man eine solche Datei nennen?

    Ich möchte overhead vermeiden und es möglichst übersichtlich lassen und deshalb nur die Headerdateien einfügen, die ich auch brauche. Wie sieht es dabei mit #include <glm/fwd.hpp> aus?

    Zudem kommt eventuell noch ein #define GLM_FORCE_SWIZZLE um vec2 in vec3 zu casten oder gibt es einen besseren Weg (ist es besser selbst eine Funktion zum casten zu schreiben)?



  • Eigentlich nicht. Überflüssige Includes sollte man vermeiden. Jetzt hast da nur paar Headerdateien, aber was ist, wenns mal paar dutzend sind, und du sie überall inkludierst, wo du eigentlich nur 2 oder 3 brauchst?



  • @titan99_
    Wenn du die includes in eine extra header-Datei schreibst sieht man halt nicht sofort welche Abhängigkeiten der Code hat, sondern muss noch eine extra Datei betrachten.
    Zumal würde ich schon den Nutzen für dich in Frage stellen. Wie oft kommt es denn vor das du immer wieder die gleiche Konstellation an header-Dateien einbinden muss, dass sich das lohnen würde?



  • @mechanics sagte in Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen:

    Jetzt hast da nur paar Headerdateien, aber was ist, wenns mal paar dutzend sind, und du sie überall inkludierst, wo du eigentlich nur 2 oder 3 brauchst?

    Also ich würde die extra Headerdatei auf glm beschränken und diese dann dort einfügen wo ich sie brauche.

    @axels sagte in Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen:

    Wie oft kommt es denn vor das du immer wieder die gleiche Konstellation an header-Dateien einbinden muss, dass sich das lohnen würde?

    Also ein paar Inkludierungen sind jetzt doppelt, andere wären je nach dem bei einer extra header-Datei überflüssig.

    Was noch ist, sind die eins bis zwei #define vor #include.



  • @titan99_ sagte in Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen:

    Also ich würde die extra Headerdatei auf glm beschränken und diese dann dort einfügen wo ich sie brauche.

    Schon klar. Aber schau dir mal an, wieviele allein das sind:

    https://glm.g-truc.net/0.9.9/api/modules.html



  • @mechanics Es wäre ja auch #include <glm/glm.hpp> möglich und die restlichen könnte ich dann jeweils einfügen.

    Vielen Dank für die Antworten :smiling_face_with_open_mouth_smiling_eyes:

    Aber wenn ich trotzdem eine eigene Headerdatei mit den defines erstellen würde, wie würde man diese dann am besten nennen? glminclude.h, glmpool.h oder glmsetup.h?


  • Mod

    @titan99_ sagte in Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen:

    Aber wenn ich trotzdem eine eigene Headerdatei mit den defines erstellen würde, wie würde man diese dann am besten nennen? glminclude.h, glmpool.h oder glmsetup.h?

    i_asked_in_a_forum_if_this_is_a_good_idea_they_said_no_but_i_did_it_anyway.h



  • Naja, es gibt solche Sammelheader durchaus in diversen Projekten. Nur um mal zwei Beispiele aus populären, sicherlich gut gereviewten Libraries zu nennen:

    #include <range/v3/all.hpp>
    #include <boost/algorithm/string.hpp>
    

    Daher stehe ich dem Vorhaben nicht so kritisch entgegen. Viele kleine Header nerven und man verbringt zu viel Zeit damit, die richtigen Header rauszusuchen. Man tradet etwas Compilezeit gegen schnellere Entwicklung.



  • Mir sind jetzt gerade noch Sammelheaderdateinamen wie customglm.h oder individualglm.h durch den Kopf.

    @seppj sagte in Headerdateien von Library glm in einer eigenen Headerdatei zusammenfassen:

    i_asked_in_a_forum_if_this_is_a_good_idea_they_said_no_but_i_did_it_anyway.h

    :smiling_face_with_open_mouth_smiling_eyes: 🙄

    Vorläufig werde ich keine Sammelheaderdatei erstellen. Ich denke beim programmieren bietet es die besagten Vorteile.

    Mich nähme noch Wunder, was es mit den precompiled header auf sich hat und den forward-declaration. Also ich habe in das Debug Verzeichnis geschaut und dort sah ich u.a. die object-files, die ja dann gelinkt wurden. Blicke nicht ganz durch, die Headerdatei(en) werden in die Sourcedatei hinzugefügt und dann zusammen kompiliert? Ist dann der Headerguard nur dazu da, wenn die gleiche Headerdatei z.B. indirekt mehrmals zum gleichen Sourcefile hinzugefügt wird? Werden Headerdateien immer kompiliert, wenn sich dort etwas ändert, wo sie eingefügt werden?


Log in to reply