In meinem Projekt habe ich mehrere Enum-Deklarationen wie diese;Kombiniere enums C++
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
};
enum Arithmetic
{
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
Und ich würde gerne mehrere davon kombinieren, in einer einzigen kombinierten enum, so dass;
- Alle Elemente (aus den Sub-Enums) sind in der kombinierten enum vorhanden.
- Alle Elemente haben einen eindeutigen Wert (offensichtlich).
- Alle Elemente haben konsistenten Wert in der kombinierten enum und dem Original.
So:
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
Auch das, was ich möchte in der Lage sein, zu tun ist, zu ‚werfen‘ die kombinierte Enum, einem der ursprünglichen, den Wert in der kombinierten gegeben Nur Enumeration (sollte trivial sein unter der Annahme, dass die Werte konsistent sind).
Eine Alternative zu enum ist eine klassenbasierte Lösung, bei der die Klassen den Operator operator int()
implementieren.
Hinweis; Ich glaube, die operator int()
ist irgendwie der Weg zu gehen.
Was, wenn zwei Elemente passiert, den gleichen Wert in verschiedenen 'enum's haben ? – Jacob
Ich lege keinem Element explizit Werte zu, ich wollte, dass der Compiler es wenn möglich automatisch behandelt. Mein derzeitiger 'Fix' besteht darin, einfach das erste Element in jeder Enumeration dem Wert des letzten Elements in der vorherigen Enumeration (+1) zuzuweisen. - Jedoch finde ich das überhaupt nicht angenehm. – Skeen
Warum möchten Sie mehrere Enums sowie eine 'Master' Enum haben? – Kindread