[c++]enums mit Funktionen füllen

uhu01

Erfahrenes Mitglied
Hy!

Kennt jemand ein Möglichkeit ein enum mit Rückgabewerten aus einer Funktion zu füllen?
Also:
Code:
enum _enStyle {
  ST_STANDARD = _MakeStyle( ...),
  ST_WARNING = _MakeStyle( ...)
}

Ich Programmiere eine Konsolenanwendung mit VC2003

Währe nett wenn mir jemand helfen könnte.
mfg
uhu01
 
Hallo,
meines erachtens ist das nicht möglich,
da Werte eines enums Konstanten sein müssen, die statisch gebunden werden, d.h.
sie müssen vor der Compilezeit festliegen.
Rückgabewerte von Funktionen werden immer dynamisch, d.h. während der Ausführungszeit
gebunden.
Deswegen ist dein Vorhaben nicht möglich.

Gruß

RedWing
 
Hy!

Danke für die Info, habs mir schon gedacht wollte nur wissen ob's vielleicht doch eine Möglichkeit gibt.

mfg
uhu01
 
Hy!

Wie mit einer Klasse? Das enum enthält Werte die ich zur Formatierung von Ausgaben verwende. D.h. die ersten 6 Bit stehen für die Fordergrundfarbe, die zweiten 6 für die Hintergrundfarbe und der Rest ist offen für Flag wie z.B. Fett oder Kursiv. Einer Funtion die nun eine Zeile in ein HTML-File schreibt (Log-File) übergebe ich jetzt z.B. ST_WARNING um eine bestimmte Formatierung zu erreichen. Die Funktion ist Teil einer Klasse die HTML-Logs erstellt.

Wie meinst du das mit der Klasse?

mfg uhu01
 
moin


Dein ST_STANDARD und ST_WARNING, sind doch auch ncihts anderes als constante Variablen?!

Weisst du denn was eine Klasse ist?!


mfg
umbrasaxum
 
Hy!

Sicher weis ich was eine Klasse ist, aber ich hab bis jetzt für sowas immer enums verwendet.
Ich denke mal das du gemeint hast ich soll eine Klasse programmieren mit Zugriffsoperatoren auf Farben etc. und dann einige Objekte mit den Einstellungen meiner Vordefinierten Farbset als constant Objekte anlegen, oder?

Auch eine Möglichkeit, hab das Programm jetzt jedoch schon mit enums realisiert. Verwende enums oft z.B. für Flags etc. habs diesmal glaub ich etwas übertrieben.

Achja, ich weis was eine Klasse ist, das enum ist ja auch bestandteil einer Klasse
Hab mich oben etwas zweideutig ausgedrückt.

mfg
uhu01
 
Zuletzt bearbeitet:
umbrasaxum hat gesagt.:
moin


Dein ST_STANDARD und ST_WARNING, sind doch auch ncihts anderes als constante Variablen?!

Weisst du denn was eine Klasse ist?!


mfg
umbrasaxum

Wie du das Problem als Klasse lösen willlst is mir ehrlich gesagt auch schleierhaft.
Sein Problem ist das er versucht einer konstante (statische Bindung) einen Wert
zuzuweisen der erst zur Ausführungszeit bekannt ist, und das kann man mit
konstanten Membervariablen einer Klasse genauso wenig lösen da die auch statisch
gebunden werden.

Musst du deine Variablen unbedingt aus Funktionen heraus realiesieren?
Wie wäre es denn mit folgender Deklaration deiner MakeStyle Methode:
Code:
_enStyle _MakeStyle(int,int){
   if(bed)
             return ST_STANDARD;
   else
             return ST_WARNING;
}
Aber leider is mir nicht klar was du machen möchtest, deswegen kann ich hier nur
Mutmassungen anstellen.

Gruß

RedWing
 
moin


Nene das mit der Klasse war, von mir, falsch gedacht!

Aber noch eine Frage, warum müssen es ungedingt konstante Variablen sein?


mfg
umbrasaxum
 
Hy!

Es müssen natürlich keine konstanten Werte sein, aber da es sich um vordefinierte Stile handelt ( z.B. hat ST_ERROR einen roten Hintergrund und eine Fette Schrift) mach ich das ganze mit Konstanten, und da ich mit nem enum einige Konstanten unter einem Überbegriff gruppieren kann, und das ganze einfach schöner ist als per #define deswegen mach ichs so.

Nur noch zur Erklärung: Das ganze soll eine Klasse sein die ein Logfile in einem Programm produziert, in dem ich keine Ausgaben auf den Bildschirm machen kann. Also hab ich mir gedacht ich mach mir eine Klasse die gleich ein schön formatiertes HTML Dokument ausgiebt, um die Logs besser lesen zu können.
Jetzt bin ich schon fast fertig, und über eine kleine Funktion InsertLog(), bzw. über Makro LOG() kann ich Ausgaben in ein HTML-File machen. Sieht dann z.B. so aus:
LOG( "ungültige Parameter"; ST_WARNING);
Und in meinem HTML Log bekomme ich ein Zeile mit der Formatierung die ST_WARNING entspricht. Aufrufstack und Laufzeit des Programms stehen auch davor. Die enums Verwende ich jetzt, da durch die Typensicherheit, die durch die enums im Gegensatz zu const Variablen oder #defines gegeben ist ich eine Fehlerquelle ausschalten kann.
Ich hoffe ich hab meine Verwendung der Konstanten gut erklärt.

mfg
uhu01
 
Zurück