Seite 1 von 1
Von einem Enum erben
Verfasst: 18.07.2012, 14:43
von Schrompf
Guten Tag, verehrte Herren.
Ich möchte gern einen Enum erstellen, der alle Werte eines anderen Enums übernimmt und hintendran weitere Werte anfügt. Geht das in C++ irgendwie? Optionaler Fakt: Visual Studio 2010. Aber da die 2012 ja auch wieder WinXP unterstützen wird, kann ich auch mit C++11-Lösungen leben, die mit VS10 noch nicht gehen.
Re: Von einem Enum erben
Verfasst: 18.07.2012, 14:49
von dot
Folgender Vorschlag:
Code: Alles auswählen
struct bla
{
enum first
{
A,
B
};
};
struct bli : bla
{
enum second
{
C,
D
};
};
int main()
{
bli::A;
}
Da ist es ausnahmsweise mal nützlich, dass enumerators in den äußeren scope spillen...
Re: Von einem Enum erben
Verfasst: 18.07.2012, 14:50
von Matthias Gubisch
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:05
von klickverbot
dot hat geschrieben:Folgender Vorschlag:
Code: Alles auswählen
struct bla
{
enum first
{
A,
B
};
};
struct bli : bla
{
enum second
{
C,
D
};
};
Das dürfte nicht funktionieren, wenn du eine Variable/einen Parameter vom Typ
bli::second anlegen willst, oder übersehe ich etwas?
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:07
von Schrompf
Interessante Ideen, Danke. Wenn ich mich geistig einfach davon verabschiede, dass der Typ ein richtiger Enum sein soll, ist das Problem plötzlich sehr viel einfacher. Ein size_t in eine Template-Klasse gewrappt sollte da prima funktionieren.
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:08
von dot
klickverbot hat geschrieben:Das dürfte nicht funktionieren, wenn du eine Variable/einen Parameter vom Typ bli::second anlegen willst, oder übersehe ich etwas?
Stimmt, daran hab ich jetzt auf die Schnelle nicht gedacht. Da müsste man wohl mit int und Casts was hacken, was vermutlich genau das ist, was der template Kram aus dem verlinkten Artikel tut...
Daher frag ich lieber mal Schrompf: Wofür genau brauchst du das eigentlich?
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:14
von Schrompf
Kontext: meine kleine GUI-Bibliothek nimmt bisher nur Tasten mit Bedeutung als Ereignisse an. Also anstatt konkreten Tasten wie "Pfeiltaste Links" oder "Escape" werden als Input nur Bedeutungen wie "nach links" oder "Abbruch" akzeptiert. Das ist prima für konfigurierbare Tastenzuordnungen und erlaubt auch stressfrei die Bedienung der GUI mit GamePads. Nun brauche ich aber für den aktuellen Auftrag aber komplexere Tasten-Shortcuts und wollte deswegen einfach meinen kleinen Tasten-Enum um alle Tasten von OIS erweitern. Die eigenen Tasten hätte ich dann irgendwo in einen abschüssigen Zahlenbereich gelegt. Da aktuell alle Logik mit konkreten Enum-Werten arbeitet, wäre das eine abwärtskompatible Erweiterung gewesen, die das Problem einfach und schnell gelöst hätte.
Randbemerkung: ich habe mein ganzes Framework und die Dependencies endlich mal in ein eigenes Repository rausgezogen und per svn:external in jedes Projekt eingebunden. Erspart mir ne Menge Sync-Arbeit. Ich ärgere mich, dass ich das nicht schon viel früher gemacht habe.
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:18
von dot
hm...vielleicht was in der Richtung:
Code: Alles auswählen
class Key
{
private:
int key;
public:
Key(DeinKeyEnum key)
: key(key)
{
}
Key(OISKeyEnum key)
: key(key)
{
}
operator int() const { return key; }
};
Re: Von einem Enum erben
Verfasst: 18.07.2012, 15:20
von Schrompf
Jupp, genau sowas. Danke für die Ideen!