Seite 1 von 1

Globale (konstante) Variablen zu einem Projekt

Verfasst: 17. April 2011 15:56
von huckleberry
Hallo Foristen,

wenn ich an einem Projekt dran bin, habe ich mir der Übersichtlichkeit wegen vorgenommen, alle Verwaltungstechnischen Informationen wie beispielsweise:
  • - Name der Applikation
    - Aktuellen Version (evtl später dann auch aufgeteilt in major und minor)
    - Zielplattform
    - Servernamen
    - und was weiss ich noch alles
in einer separate globalen Klasse aufzubewahren. Allerdings ist das ja eher ein schlechter Programmierstil.

Sinn wäre folgender:
Ich wollte von jeder anderen Klasse aus Fehlermeldungen wie "Eingabedatei nicht gefunden" in einer Messagebox ausgeben, welcher wiederum im Titel den Applikationname, Version usw beinhalten sollte.
Ich wollte zB die Versionsnummer nicht jedesmal manuell eintippen, um bei neuer Version nicht alle Vorkommen neu zu korrigieren.

Gibt es hier eine eleganten Möglichkeit?

Gruß Huck

Verfasst: 17. April 2011 18:10
von franzf
Das was du global abspeichern willst, ist legitim. Es wäre unhandlich, wenn an jeder Stelle, die die Version braucht, eine Instanz eines struct erzeugt oder von außen jene übergebenwerden müsste.
ABER: Diese Informationen werden zur Laufzeit NICHT verändert, sind also konstant.

Code: Alles auswählen

namespace ProgramInfo {
    static const int version = 0x403020;
    // usw.
}
Alternativ über Macros:

Code: Alles auswählen

#define PROGRAM_VERSION 0x403020

Verfasst: 19. April 2011 13:01
von astrunck
... ist vielleicht was spät, aber ...

wie wäre es mit QCoreApplication, bzw. QApplication.
(applicationVersion(), etc.)

Gibt es nur einmal und besitzt genau die Attribute, welche du aufgelistet hast.

Man könnte ja ein Interface drüber legen, welches dann die Funktionen setApplication() etc. ausblendet.
Das Interface kann man ja dann überall dort, wo es benötigt wird, einbinden.

Verfasst: 19. April 2011 18:03
von dazedly
ich hab das Ganze folgendermaßen gemacht:

Ich hab drei Projekte und eine übergeordnete CMake. Alle Sollen die selbe version besitzen.

CMake (man beachte auch -DVERSION="Debug ${PROGRAMVERSION}") :

Code: Alles auswählen

SET(PROGRAMVERSION "0.01")
.....
.....
...
add_definitions(-ggdb -march=native -DVERSION="Debug ${PROGRAMVERSION}" -DDEBUG -Wall -Wextra -pedantic -pedantic-errors -Wall -Wextra -Werror -Wno-long-long)
In den Mains:

Code: Alles auswählen

#ifndef VERSION
	#define VERSION "NOT SET"
#endif

.....
.....
...
	QApplication app(argc, argv);
	app.setApplicationName("Programmname");
	app.setApplicationVersion(VERSION);
Wird wohl mit qmake ähnlich funktionieren.

Verfasst: 27. Mai 2011 08:23
von huckleberry
Dankeschön. Das sind gute Anregungen. Ich werde mich damit auseinandersetzen..