Existiert das Schlüsselwort typename in C++ aus Gründen der Abwärtskompatibilität mit „C-Vorlagen“?
Lesezeit: 4 Minuten
ELLIOTTKABEL
Ich nehme an einem C++-Kurs teil, und mein Lehrer erwähnte nebenbei, dass die typename Schlüsselwort existierte in C++ (im Gegensatz zur Verwendung von class Schlüsselwort in einer Template-Deklaration), für die Abwärtskompatibilität mit „C-Templates“.
Das hat mich umgehauen. Ich habe noch nie Ich habe in ANSI C etwas wie die Templates von C++ gesehen oder gehört (mit Ausnahme vielleicht des Präprozessors … und das ist überhaupt nicht dasselbe). Also, habe ich etwas verpasst? riesig irgendwo, oder ist das eine wirklich esoterische Erweiterung von gcc oder so, oder ist mein Lehrer völlig daneben?
Kannst du einen neuen Lehrer finden?
– SLaks
25. Februar 2010 um 20:03 Uhr
Ehrlich gesagt mag ich diesen Lehrer sehr. Er ist bei weitem der beste Programmierlehrer, den ich an dieser Universität getroffen habe. Ich werde es ihnen zuliebe vermeiden, die Universität (und die Lehrer) anzugeben.
– ELLIOTTKABEL
25. Februar 2010 um 20:05 Uhr
(Zum Vergleich: Einer der früheren Lehrer, der einen C-Kurs unterrichtete, wies uns an, „jede Datei mit der Zeile zu beginnen void main () {. Daran ist so vieles falsch, ich weiß gar nicht, wo ich anfangen soll… das Auffälligste ist für mich das Geben main() a void Rückgabetyp. Das ist so un-UNIX )-:< es hat mich krank gemacht.)
– ELLIOTTKABEL
25. Februar 2010 um 20:06 Uhr
Überlegen Sie dann, die Universität zu wechseln
– qrdl
25. Februar 2010 um 20:39 Uhr
Wo ich bin, gibt es keine anderen. Jedenfalls nehme ich nur die eine Klasse, hauptsächlich aus Langeweile. Und nur weil er einen Fehler gemacht hat, heißt das nicht, dass er als Lehrer nutzlos ist d-:
Vielleicht war der Ausdruck, auf den Ihr Lehrer abzielte, in etwa so wie “…für Abwärtskompatibilität mit C Typen“, dh das Erkennen des Problems, dass template<class T> ist irreführend, wenn T ist ein eingebauter Typ im C-Stil wie z char oder intwie andere gesagt haben. Aber das ist keine Klasse! 🙂
Vor einiger Zeit waren es ein paar GCC-Leute vorschlagen dass die Bereitstellung der Template-Maschinerie für den C-Compiler eine gute Möglichkeit wäre, C99 zu implementieren <tgmath.h>aber daraus scheint nichts geworden zu sein.
Dein Lehrer erfindet Dinge. Vorlagen gibt es in C nicht. Die typename Schlüsselwort existiert aus zwei Gründen:
Sinnvoller ist es zu sagen template<typename T> als template<class T> seit T können Nicht-Klassen-Typen sein int oder double.
Es kann verwendet werden, um Parsing-Mehrdeutigkeiten in Deklarationen wie aufzulösen A::B * foo;. Deklariert dies eine Variable namens foo, oder ist es ein Multiplikationsausdruck? (Antwort: Es wird als letzteres geparst. Um es zu machen, schreiben Sie eine Deklaration typename A::B *foo; was den Compiler anweist zu interpretieren A::B als Typname, nicht als Variablenname.)
Nein, es gibt kein C-Template. typename ist nicht einmal ein Schlüsselwort in C.
jkerian
Das scheint nicht richtig zu sein. typename ist überhaupt kein reserviertes Wort in C.
Vielleicht haben sie sich falsch ausgedrückt/erinnert und an “C mit Klassen” gedacht.
Benutzer2597858
Ich möchte sagen, dass C wirklich kein natives Template-Zeug hat, aber Sie können dafür sorgen, dass es mit einer Art von a gut funktioniert Metaprogrammierung, Schau mal Im Internet finden Sie, wie Sie …
Ein weiterer wichtiger Punkt ist, dass C eine Programmiersprache für allgemeine Zwecke ist, sodass viele Dinge wie Objektorientierung, Vorlagen und einige andere Dinge mit etwas mehr Aufwand erledigt werden können.
Projekte wie Gnome beweisen, dass es machbar ist und zwar sehr gut.
PS: Entschuldigung für mein schreckliches Englisch!!!
12158700cookie-checkExistiert das Schlüsselwort typename in C++ aus Gründen der Abwärtskompatibilität mit „C-Vorlagen“?yes
Kannst du einen neuen Lehrer finden?
– SLaks
25. Februar 2010 um 20:03 Uhr
Ehrlich gesagt mag ich diesen Lehrer sehr. Er ist bei weitem der beste Programmierlehrer, den ich an dieser Universität getroffen habe. Ich werde es ihnen zuliebe vermeiden, die Universität (und die Lehrer) anzugeben.
– ELLIOTTKABEL
25. Februar 2010 um 20:05 Uhr
(Zum Vergleich: Einer der früheren Lehrer, der einen C-Kurs unterrichtete, wies uns an, „jede Datei mit der Zeile zu beginnen
void main () {
. Daran ist so vieles falsch, ich weiß gar nicht, wo ich anfangen soll… das Auffälligste ist für mich das Gebenmain()
avoid
Rückgabetyp. Das ist so un-UNIX )-:< es hat mich krank gemacht.)– ELLIOTTKABEL
25. Februar 2010 um 20:06 Uhr
Überlegen Sie dann, die Universität zu wechseln
– qrdl
25. Februar 2010 um 20:39 Uhr
Wo ich bin, gibt es keine anderen. Jedenfalls nehme ich nur die eine Klasse, hauptsächlich aus Langeweile. Und nur weil er einen Fehler gemacht hat, heißt das nicht, dass er als Lehrer nutzlos ist d-:
– ELLIOTTKABEL
26. Februar 2010 um 1:23 Uhr