variadic template parameters: parameter-type zur laufzeit auswaehlen
-
danke euch fuer die hilfe.
Meep Meep
-
static void ((*const)throws())[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
using fun = void(*)(); static const fun throws[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
-
Arcoth schrieb:
static void ((*const)throws())[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
using fun = void(*)(); static const fun throws[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
Einzeiler rulz
void do_magic_and_throw(unsigned int idx) { (void(*[])()){ [] {}, [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... }[idx<=sizeof...(PARAMS)+1?idx:0](); }
-
camper schrieb:
Einzeiler rulz
(void(*[])()){ [] {}, [] {
Mal ganz ernsthaft: ist sowas noch lesbar?
Ich schreibe ja auch gern in Perl und es wurde der Sprache immer vorgeworfen, sie sei nicht lesbar wegen der Sonderzeichen. Aber das hier ist doch nicht besser: 17 Sonderzeichen hinter dem void! Ernsthaft? Gut, []{} ist z.B. schnell als leeres Lambda identifiziert, und nach längerem Hingucken verstehe ich sogar den ganzen Ausdruck. Geht das nicht in verständlicher?
-
wob schrieb:
camper schrieb:
Einzeiler rulz
(void(*[])()){ [] {}, [] {
Mal ganz ernsthaft: ist sowas noch lesbar?
Der ernsthafte Teil des Threads ist zu Ende, jetzt ist Feierabend. Ein Lisp-Programmierer dürfte sich wohlfühlen, und immerhin ist es nicht immer dieselbe Klammerart.
-
camper schrieb:
Arcoth schrieb:
static void ((*const)throws())[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
using fun = void(*)(); static const fun throws[] = { [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... };
Einzeiler rulz
void do_magic_and_throw(unsigned int idx) { (void(*[])()){ [] {}, [] { throw PARAM1{}; }, [] { throw PARAMS{}; }... }[idx<=sizeof...(PARAMS)+1?idx:0](); }
Ist das überhaupt gültiges C++? IIRC ist
T[]
keine gültige type-id in einer functional cast expression.
-
Arcoth schrieb:
IIRC ist
T[]
keine gültige type-id in einer functional cast expression.In C++03 hättest du noch recht gehabt.Edit: Err. du hast recht, aber hier haben wir (T)x also Explicit type conversion (cast notation).
-
camper schrieb:
Arcoth schrieb:
IIRC ist
T[]
keine gültige type-id in einer functional cast expression.In C++03 hättest du noch recht gehabt.
Ich bin mir ziemlich sicher, dass ich immer noch Recht habe.
-
korrigiert.
-
camper schrieb:
Edit: Err. du hast recht, aber hier haben wir (T)x also Explicit type conversion (cast notation).
Genau genommen haben wir hier überhaupt nichts, weil das einfach kein gültiges Produkt der Grammatik ist.
Edit: Also ich hätte nichts gegen compound literals in C++. Proposal?
-
Arcoth schrieb:
camper schrieb:
Edit: Err. du hast recht, aber hier haben wir (T)x also Explicit type conversion (cast notation).
Genau genommen haben wir hier überhaupt nichts, weil das einfach kein gültiges Produkt der Grammatik ist.
Komisch, dass kein vernünftiger moderner Compiler damit Probleme hat. (Visual C++ zählt nicht). Diese Behauptung müsstest du also noch begründen.
-
camper schrieb:
Arcoth schrieb:
camper schrieb:
Edit: Err. du hast recht, aber hier haben wir (T)x also Explicit type conversion (cast notation).
Genau genommen haben wir hier überhaupt nichts, weil das einfach kein gültiges Produkt der Grammatik ist.
Komisch, dass kein vernünftiger moderner Compiler damit Probleme hat. (Visual C++ zählt nicht). Diese Behauptung müsstest du also noch begründen.
Ist das dein Ernst? Schalte mal deine Warnungen an. GCC und Clang beschweren sich mit "ISO C++ forbids compound-literals", und die Grammatik von cast-expressions verlangt eindeutig nach einem Ausdruck nach dem eingeklammerten Typen. Du stimmst sicher zu, dass
{...}
kein Ausdruck ist.(Visual C++ zählt nicht).
Visual C++ ist zumindest im Frontend auf EDG basiert, welches relativ akkurat sein dürfte (glaub ich). Kenne mich damit aber zu wenig aus.
-
Ok. Schön. Aus irgendeinem Grunde war -pedantic bei mir nicht pedantisch genug
Es scheint also, dass so oder so irgend ein Name für etwas (Typ oder Variable nach Belieben) eingeführt werden muss. Wie super überflüssig
-
camper schrieb:
Ok. Schön. Aus irgendeinem Grunde war -pedantic bei mir nicht pedantisch genug
Das ist ein Warnflag ("kurz"form für
-Wpedantic
), und eine Warnung ist damit auch alles, was es bewirken kann.camper schrieb:
Es scheint also, dass so oder so irgend ein Name für etwas (Typ oder Variable nach Belieben) eingeführt werden muss. Wie super überflüssig
Müsste man eigentlich standardisieren, ich sehe wie oben erwähnt nicht direkt, was dagegen spricht. In C funktioniert es ja.
-
Arcoth schrieb:
Visual C++ ist zumindest im Frontend auf EDG basiert
Der VC++-Compiler verwendet nicht das EDG-Frontend; das wird nur fürs Intellisense eingesetzt.