a=b-----c;?
-
CStoll schrieb:
Alle normalen Klammern sind bereits von C her vergeben.
warum gehen normale klammern nicht? zwei klammern direkt hintereinander '((' könnten doch nicht als was anderes missverstanden werden...
:xmas2:
-
Klar können sie - z.B. als C-Style Cast
memcpy((void*)&data,(void*)buffer);, als doppelte Klammer in arithmetischen Ausdrücken oder als geklammerter Parameterlen=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
-
Wenn der so dumm war stellt sich die Frage warum viele andere sich das für Generic-Syntax abgeguckt haben

In VB gibts dafür Runde Klammern und das Schlüsselwort Of, aber ob das besser/schöner ist wage ich zu bezweifeln
Function Max(Of Type)(A as Type, B as Type) as Type
-
CStoll schrieb:
Klar können sie - z.B. als C-Style Cast
memcpy((void*)&data,(void*)buffer);...und wo ist da ein fehler?
erste klammer aufgemacht --> parameterliste beginnt
zweite klammer aufgemacht --> cast beginnt
wenn einer sowas schreibt, aber was anderes haben will, hat er ja selber schuld.
-
Da habe ich wohl deinen vorigen Beitrag falsch verstanden. Normale Klammern ( (...), {...} oder [...] ) haben in C bereits eine vorgegebene Bedeutung (teilweise sogar mehrere), darum konnte man sie nicht als Template-Klammern verwenden. Deshalb wurde für Templates eine "neue" Klammer-Form <...> verwendet, die aber leider gelegentlich mit der ursprünglichen Bedeutung von < und > (bzw. >>) kollidiert. Also: Was hättest du verwendet, wenn du der Erfinder von C++ wärst?
-
ich versteh' immer noch nicht, was gegen normale klammern sprechen sollte? sowas z.b:
A(b((int)x));rufe funktion 'b' auf mit argument 'x' zu int gecastet und mit dem rückgabewert werwende dann makro 'A'.
ok, blödes beispiel, aber es geht doch auch, warum sollte das nicht mit templates möglich sein?
-
Weiß garnicht was ihr bzgl. >> bei Template-Parametern habt? Der "Bug" wurde doch für C++2009 schon behoben bzw. in den Working Draft aufgenommen und vom Komitee abgesegnet. UND der VC++ 2005 beachtet dieses C++2009-Feature bereits! (ausnahmsweise hängt VC++ nicht hinterher sondern kann schon, was noch kommt)
-
Künstliches Produkt:
template <class T> struct t { t(int i){a = i;} T a; }; template <class N> void fun(t<N> x) { x.a = 12; } int main(int argc, char* argv[]) { long i; int y; fun(t<int>(12)); return 0; }Daraus würde dann werden:
template (class T) struct t { t(int i){a = i;} T a; }; template (class N) void fun(t<N> x) { x.a = 12; } int main(int argc, char* argv[]) { long i; int y; fun(t(int)(12)); // Wäre mir zu Komplex die Regelwelt return 0; }
-
Zum lesen sind die <> bei Templates auf jeden Fall besser als (). Das der Compiler das vielleicht verstehen könnte, heißt nicht, das ich als Mensch es besser lesen könnte. Schon alleine beim überfliegen des Codes fallen die <> eher auf und ich weiß: aha, da scheint was mit Templates zu sein.
-
Artchi schrieb:
Zum lesen sind die <> bei Templates auf jeden Fall besser als (). Das der Compiler das vielleicht verstehen könnte, heißt nicht, das ich als Mensch es besser lesen könnte. Schon alleine beim überfliegen des Codes fallen die <> eher auf und ich weiß: aha, da scheint was mit Templates zu sein.
da habt ihr natürlich recht. also muss was anderes her, etwas, das gut lesbar ist und nicht als operator o.ä. missinterpretiert werden kann. irgendwie steckt in c++ doch noch viel potential für verbesserungen...
:xmas2:
-
LordJaxom schrieb:
In VB gibts dafür Runde Klammern und das Schlüsselwort Of, aber ob das besser/schöner ist wage ich zu bezweifeln
"Schöner" auf jeden Fall. Allerdings nicht so konzise. Bei geschachtelten Template-Aufrufen erhält man einen riesig aufgeblähten Code, der nicht mehr gut lesbar ist.
CStoll schrieb:
Also: Was hättest du verwendet, wenn du der Erfinder von C++ wärst?
Es gibt die Idee in einer C++-äquivalenten Sprache (Name vergessen), die Zeichen '<[' und ']>' zu verwenden. Vorteil: Die Grammatik wird eindeutig(er). Nachteil: Na, sieht halt furchtbar aus.
