Von einem Enum erben
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Von einem Enum erben
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.
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Von einem Enum erben
Folgender Vorschlag:
Da ist es ausnahmsweise mal nützlich, dass enumerators in den äußeren scope spillen...
Code: Alles auswählen
struct bla
{
enum first
{
A,
B
};
};
struct bli : bla
{
enum second
{
C,
D
};
};
int main()
{
bli::A;
}
Zuletzt geändert von dot am 18.07.2012, 14:51, insgesamt 1-mal geändert.
-
- Establishment
- Beiträge: 470
- Registriert: 01.03.2009, 19:09
Re: Von einem Enum erben
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
-
- Establishment
- Beiträge: 191
- Registriert: 01.03.2009, 19:22
- Echter Name: David N.
Re: Von einem Enum erben
Das dürfte nicht funktionieren, wenn du eine Variable/einen Parameter vom Typ bli::second anlegen willst, oder übersehe ich etwas?dot hat geschrieben:Folgender Vorschlag:Code: Alles auswählen
struct bla { enum first { A, B }; }; struct bli : bla { enum second { C, D }; };
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: Von einem Enum erben
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Von einem Enum erben
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...klickverbot hat geschrieben:Das dürfte nicht funktionieren, wenn du eine Variable/einen Parameter vom Typ bli::second anlegen willst, oder übersehe ich etwas?
Daher frag ich lieber mal Schrompf: Wofür genau brauchst du das eigentlich?
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: Von einem Enum erben
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.
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Von einem Enum erben
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; }
};
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: Von einem Enum erben
Jupp, genau sowas. Danke für die Ideen!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.