enum class Problem
-
Hacker schrieb:
(@PI: Viel Spaß mit deinem Makro XD).
#define BITFLAGS_ENUM(enum_type, underlaying_type) \ bool operator &(enum_type a, enum_type b) \ { return static_cast<underlaying_type>(a) & static_cast<underlaying_type>(b); \ } \ \ enum_type operator | (enum_type a, enum_type b) \ { \ return static_cast<enum_type>(static_cast<underlaying_type>(a) | static_cast<underlaying_type>(b)); \ } \ ...enum struct e : std::uint64_t { foo = (1 << 0), bar = (1 << 1), baz = (1 << 2), qux = (1 << 3), ... }; BITFLAGS_ENUM(e, std::uint64_t)Oh ja, ist ja wirklich unglaublich schwer...
-
314159265358979 schrieb:
Hacker schrieb:
(@PI: Viel Spaß mit deinem Makro XD).
#define BITFLAGS_ENUM(enum_type, underlaying_type) \ bool operator &(enum_type a, enum_type b) \ { return static_cast<underlaying_type>(a) & static_cast<underlaying_type>(b); \ } \ \ enum_type operator | (enum_type a, enum_type b) \ { \ return static_cast<enum_type>(static_cast<underlaying_type>(a) | static_cast<underlaying_type>(b)); \ } \ ...enum struct e : std::uint64_t { foo = (1 << 0), bar = (1 << 1), baz = (1 << 2), qux = (1 << 3), ... }; BITFLAGS_ENUM(e, std::uint64_t)Oh ja, ist ja wirklich unglaublich schwer...
Nö schwer nicht... davon war nie die Rede...einfach mehr Aufwand als nötig (wenn du noch arithmetische Grundrechenarten dazu nimmst
)
-
Jo wirklich, ein BITFLAGS_ENUM(bla, fuh) hinschreiben ist wirklich total viel Aufwand. Außerdem: Wieso willst du mit enums rechnen? oO
-
314159265358979 schrieb:
Jo wirklich, ein BITFLAGS_ENUM(bla, fuh) hinschreiben ist wirklich total viel Aufwand. Außerdem: Wieso willst du mit enums rechnen? oO
Ne, nicht das hinschreiben vom Makro. Das definieren (obwohl du das theoretisch nur einmal brauchst und dann CTRL+C/V)... wieso ich mit ihnen Rechen will?
gelegenheitlich... ich kann jetzt kein Beispiel nennen SETZ MICH NICH' UNTER DRUCK!
-
Hacker schrieb:
Das definieren (obwohl du das theoretisch nur einmal brauchst und dann CTRL+C/V)
Nö. Stecks in nen Header.
Hacker schrieb:
... wieso ich mit ihnen Rechen will?
gelegenheitlich... ich kann jetzt kein Beispiel nennen SETZ MICH NICH' UNTER DRUCK!Bring ein Beispiel, aber schreib keinen Müll.
-
314159265358979 schrieb:
wirklich, ein BITFLAGS_ENUM(bla, fuh) hinschreiben ist wirklich total viel Aufwand.
Ich frage mich, warum du fuh brauchst. Das ist fehleranfällig und den Typen bekommst du doch auch durch
std::underlying_type<bla>::type.
-
314159265358979 schrieb:
Bring ein Beispiel, aber schreib keinen Müll.
Ok.
enum Color { black, blue, green, cyan, red, magenta, brown, light_grey, dark_grey, light_blue, light_green, light_cyan, light_red, light_magenta, yellow, white }; //... SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextColour + 16 * BackgroundColor);
-
wand auf wirklich schrieb:
314159265358979 schrieb:
wirklich, ein BITFLAGS_ENUM(bla, fuh) hinschreiben ist wirklich total viel Aufwand.
Ich frage mich, warum du fuh brauchst. Das ist fehleranfällig und den Typen bekommst du doch auch durch
std::underlying_type<bla>::type.Dass es std::underlaying_type gibt, hab ich noch nicht verinnerlicht. Du hast natürlich Recht, so wäre es besser.
Hacker schrieb:
314159265358979 schrieb:
Bring ein Beispiel, aber schreib keinen Müll.
Ok.
enum Color { black, blue, green, cyan, red, magenta, brown, light_grey, dark_grey, light_blue, light_green, light_cyan, light_red, light_magenta, yellow, white }; //... SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextColour + 16 * BackgroundColor);Mal abgesehen, dass mich Beispiele mit Windoof-spezifischem Code ankotzen, ergibt dein Beispiel doch gar keinen Sinn. Was soll denn bei 2*black rauskommen? Woher weißt du, dass 165*red immer noch red ist?
-
314159265358979 schrieb:
Hacker schrieb:
314159265358979 schrieb:
Bring ein Beispiel, aber schreib keinen Müll.
Ok.
enum Color { black, blue, green, cyan, red, magenta, brown, light_grey, dark_grey, light_blue, light_green, light_cyan, light_red, light_magenta, yellow, white }; //... SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextColour + 16 * BackgroundColor);Mal abgesehen, dass mich Beispiele mit Windoof-spezifischem Code ankotzen, ergibt dein Beispiel doch gar keinen Sinn.
Selbstverständlich ergibt es Sinn.
314159265358979 schrieb:
Was soll denn bei 2*black rauskommen? Woher weißt du, dass 165*red immer noch red ist?
Deine Fragen ergeben doch gar keinen Sinn, denn
2 * blackist 0 und165 * redist selbstverständlich irgendeine Zahl (und wieso zum Teufel sollte die dannredsein!?).
-
Hacker schrieb:
Selbstverständlich ergibt es Sinn.
Nein, tut es nicht. Farben werden üblicherweise als RGB, HSV, CMYK oder andere dargestellt. Aber ein BBGCRMBL_GD_GL_BL_GL_CL_RL_MYW Farbsystem kenn ich noch nicht.
Hacker schrieb:
Deine Fragen ergeben doch gar keinen Sinn, denn
2 * blackist 0 und165 * redist selbstverständlich irgendeine Zahl (und wieso zum Teufel sollte die dannredsein!?).Die Fragen waren vermutlich falsch formuliert. Aber ich bin mal so frei und stelle direkt die fundementalere Frage: Welche interne Repräsentation schwebt dir vor? Das würde mich nun schon sehr interessieren. Am besten implementierst du den *-Operator, gibst jeder Farbe einen bestimmten Wert und schreibst eine Funktion std::array<unsigned char, 3> to_rgb(Color).
-
314159265358979 schrieb:
Hacker schrieb:
Selbstverständlich ergibt es Sinn.
Nein, tut es nicht. Farben werden üblicherweise als RGB, HSV, CMYK oder andere dargestellt.
Microsoft!

Aber mit 8 Bit kann man kein RGB machen (durch drei geht nicht, und für jeden Farbkanal zwei Bit ist zu wenig).314159265358979 schrieb:
Hacker schrieb:
Deine Fragen ergeben doch gar keinen Sinn, denn
2 * blackist 0 und165 * redist selbstverständlich irgendeine Zahl (und wieso zum Teufel sollte die dannredsein!?).Die Fragen waren vermutlich falsch formuliert. Aber ich bin mal so frei und stelle direkt die fundementalere Frage: Welche interne Repräsentation schwebt dir vor? Das würde mich nun schon sehr interessieren. Am besten implementierst du den *-Operator, gibst jeder Farbe einen bestimmten Wert und schreibst eine Funktion std::array<unsigned char, 3> to_rgb(Color).
Tut mir leid wenn ich dir jetzt sehr blöde Fragen stelle, aber was heißt "interne Repräsentation"? Wovon?
-
Hacker schrieb:
Aber mit 8 Bit kann man kein RGB machen (durch drei geht nicht, und für jeden Farbkanal zwei Bit ist zu wenig).
Keine Ahnung, wie du auf einmal auf 8 Bit pro Farbe kommst.
Hacker schrieb:
Tut mir leid wenn ich dir jetzt sehr blöde Fragen stelle, aber was heißt "interne Repräsentation"? Wovon?
Dein enum Color basiert auf einem Datentyp. Jeder deiner enum-Werte braucht einen entsprechenden Wert des Datentyps.
-
314159265358979 schrieb:
Hacker schrieb:
Selbstverständlich ergibt es Sinn.
Nein, tut es nicht. Farben werden üblicherweise als RGB, HSV, CMYK oder andere dargestellt. Aber ein BBGCRMBL_GD_GL_BL_GL_CL_RL_MYW Farbsystem kenn ich noch nicht.
http://en.wikipedia.org/wiki/Color_Graphics_Adapter, http://en.wikipedia.org/wiki/Video_Graphics_Array#Standard_text_modes

-
314159265358979 schrieb:
Hacker schrieb:
Aber mit 8 Bit kann man kein RGB machen (durch drei geht nicht, und für jeden Farbkanal zwei Bit ist zu wenig).
Keine Ahnung, wie du auf einmal auf 8 Bit pro Farbe kommst.
Ich jetzt auch nicht mehr (wieso passiert mir das immer?). Dann hat aber Microsoft mich mal wieder enttäuscht... ohne Farbkanäle...
314159265358979 schrieb:
Hacker schrieb:
Tut mir leid wenn ich dir jetzt sehr blöde Fragen stelle, aber was heißt "interne Repräsentation"? Wovon?
Dein enum Color basiert auf einem Datentyp. Jeder deiner enum-Werte braucht einen entsprechenden Wert des Datentyps.
[/quote]
Ist klar- die sind gegeben (0, 1, 2, ...).
-
Hacker schrieb:
314159265358979 schrieb:
Hacker schrieb:
Aber mit 8 Bit kann man kein RGB machen (durch drei geht nicht, und für jeden Farbkanal zwei Bit ist zu wenig).
Keine Ahnung, wie du auf einmal auf 8 Bit pro Farbe kommst.
Ich jetzt auch nicht mehr (wieso passiert mir das immer?). Dann hat aber Microsoft mich mal wieder enttäuscht... ohne Farbkanäle...
Das hat alles nichts mit Microsoft zu tun, so funktioniert nunmal der Text Mode am PC

-
Also ist 2*blue == green?
-
Wenn man das so haben will...imo macht es wenig Sinn all die Farben in einen enum zu stecken und erst recht nicht dann auch noch mit den Konstanten zu rechnen, da ist die Lösung von Microsoft (siehe MSDN) dann doch wesentlich sinnvoller...
-
Darauf will ich doch hinaus

-
Ich wollte nur das Rätsel um die Farbsysteme auflösen

-
Da gibts doch nichts zu lösen, was ein 16-Farben System ist, war mir doch klar. Aber 16 Grundfarben ist ein Unterschied. :p