Globale Konstante



  • Hallo zusammen,

    ich wüsste gerne, wie bzw. wo ich globale Konstanten in meiner SDI-Anwendung definieren kann, damit ich auf sie von überall zugreifen kann.

    MfG, Lanca



  • Noch einen kleinen Hinweis: Es handelt sich dabei um mehr als 150 Konstanten, die als abfrage für bestimmte Funktionen gedacht sind.
    Ich möchte sie übersichtlicher definieren.
    Danke



  • Da bietet sich das Singleton-Pattern an. Du schmeisst alle Variablen in eine Klasse. Die Variablen können public sein.

    Dann kannst du so darauf zugreifen:

    CMyVarHolder->GetInstance()->myVar1 = 0;
    

    Vorteil: Wenn du auf deine Variablen in einer anderen cpp-Datei zugreifen willst musst du lediglich den Header einbinden.

    #include "MyVarHolder.h"
    

    Du brauchst keine extern Deklaration oder so was. Der Namensraum wird nicht "verschmutzt".

    Andere Möglichkeit (ohne Singleton) wäre einfach eine Klasse anzulegen und deine Variablen public und static zu machen.

    CMyVarHolder::myVar1 = 12;
    

    Auch hier reicht ein include, um die Variablen in anderen cpp Dateien anzusprechen.



  • Globale datenstruktut:

    struct GlobKonst{
    
    int a;
    char b;
    long c;
    .
    .
    .
    .
    .
    
    } NAME;
    

    und mit includes (sieh oben) verlinken....

    Zugriff bspw:

    NAME.a=...;
    


  • oder so.

    Sinnvoll wäre aber noch automatisch Default-Werte zu setzen

    struct GlobKonst{
    int a;
    char b;
    long c;
    GlobKonst() { a = 0; b = 0; c = 0; } // Default-Konstruktor
    } NAME;
    


  • Guckt dir mal eine Initialisierungsliste an @Gute_Fee...



  • Ich sehe hier nicht die Notwendigkeit einer Initialisierungsliste. Die Performancesvorteile spielen nur eine Rolle wenn sehr oft Instanzen in zeitkritischen Abschnitten erzeugt werden müssen. Dies ist hier wohl eher nicht der Fall. Der einzige Grund der dafür sprechen würde wäre, wenn Konstanten, Referenzen oder const Pointer initialisiert werden müssten.



  • Auf die Gefahr hin, altmodisch zu sein, aber wie wäre es bei echten Konstanten mit quietschnormalen ***#define***s in einem Header?

    Gruss, Gio


Anmelden zum Antworten