Wie initialisiere ich Strukturen mithilfe von Feldnamen?C++

Programme in C++. Entwicklerforum
Guest
 Wie initialisiere ich Strukturen mithilfe von Feldnamen?

Post by Guest »

Ich möchte viele verschiedene Objekte eines Typs (einer Struktur) mit unterschiedlichen Werten für ihre Felder initialisieren und ich möchte Namen für die Initialisierung verwenden, um den Code lesbar und robust zu machen.
Initialisatorlisten Denn Strukturen haben zwei tödliche Nachteile:
  • Sie sind namenlos; Wenn ich ein Dutzend Parameter desselben Typs (Farben von UI-Elementen) habe, kann es leicht passieren, dass sie durcheinander geraten. Es ist schwer zu erkennen, was jeder von ihnen bedeutet, und Kommentare helfen nicht weiter und könnten aufgrund von (2) sogar irreführen.
  • Die Reihenfolge der Strukturfelder ist ein festgelegter Vertrag (oder eine API oder eine Schnittstelle). ); Wenn ein Entwickler morgen die Reihenfolge der Felder ändert (bessere Speicheranpassung, häufigere Verwendung, alphabetische Reihenfolge usw.), werden alle Initialisiererlisten mit Werten desselben Typs in unvorhersehbarer Entfernung zerstört. Starke Stellen im Code, die ziemlich schwer zu finden sind, selbst wenn man merkt, was passiert ist.
Hier ist die Aufgabe, die ich versuche zu lösen. Ich habe eine Konfiguration für eine Anwendung, die ich in diesem speziellen Fall nicht in eine externe Datei einfügen und kompilieren lassen möchte. Das kommt dem Thema „Wie definiere ich eine C++-Struktur für die Konfiguration?“ sehr nahe, aber ich bin nicht bereit, sich häufig ändernde Parameter in eine Header-Datei einzufügen und bei jeder Änderung des Werts im Params-Quellcode eine Neukompilierung der gesamten Anwendung zu veranlassen (Besonderheiten oder F&E-Projekt, viele Dinge, die häufig eingestellt werden müssen). Also habe ich tatsächliche Werte in die CPP-Datei eingefügt.
Betrachten wir den Code (bitte bleiben Sie nicht bei dem konkreten Beispiel hängen, die Farben der Benutzeroberfläche dienen hier nur der Einfachheit des Beispiels):
params.h

Code: Select all

struct RGB { unsigned char r=0, g=0, b=0; };

struct UIColors {
RGB background;
RGB font;
};

namespace params {
extern bool ui_bright_mode;

extern UIColors night_mode;
extern UIColors bright_mode;
}
params.cpp

Code: Select all

namespace params {
bool ui_bright_mode = 1;

UIColors night_mode  = {
/*background*/ {1, 1, 1},
/*font*/ {0, 0, 200}
};

UIColors bright_mode = {
/*background*/ { 255, 255, 255 },
/*font*/ { 50, 50, 50 }
};
}
application.cpp

Code: Select all

#include 

UIColors& ui_colors() {
return params::ui_bright_mode ? params::bright_mode : params::night_mode;
}

int main()
{
std::cout

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post