Existiert das Schlüsselwort typename in C++ aus Gründen der Abwärtskompatibilität mit „C-Vorlagen“?

Lesezeit: 4 Minuten

Benutzer-Avatar
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-:

    – ELLIOTTKABEL

    26. Februar 2010 um 1:23 Uhr

Ich glaube, dein Lehrer ist daneben.

Sehen Stan Lippmans Post: Why C++ Supports both Class and Typename for Type Parameters aus dem wahren Grund, warum C++ beides unterstützt.

  • Danke, Mann. Es hat mich fast auf über 100 Ruf gebracht, endlich! d-;

    – ELLIOTTKABEL

    25. Februar 2010 um 20:02 Uhr

  • Der Lippman-Beitrag a ist gut geeignet, um diese Frage zu beantworten und zu erklären, warum typename wird manchmal in anderen Kontexten benötigt.

    – Michael Burr

    25. Februar 2010 um 20:31 Uhr

  • Dieser Link existiert nicht mehr. 404 Fehler. Aber gefunden in “docs.microsoft.com/en-us/archive/blogs/slippman/…

    – InQusitive

    8. Januar 2020 um 14:57 Uhr


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.

Nein, ANSI C unterstützt keine Vorlagen.

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/language/ref/keyword_typename.htm

Dein Lehrer erfindet Dinge. Vorlagen gibt es in C nicht. Die typename Schlüsselwort existiert aus zwei Gründen:

  1. Sinnvoller ist es zu sagen template<typename T> als template<class T> seit T können Nicht-Klassen-Typen sein int oder double.

  2. 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.)

Sehen http://pages.cs.wisc.edu/~driscoll/typename.html für eine ausführliche Erklärung.

Nein, es gibt kein C-Template. typename ist nicht einmal ein Schlüsselwort in C.

Benutzer-Avatar
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.

Benutzer-Avatar
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!!!

1215870cookie-checkExistiert das Schlüsselwort typename in C++ aus Gründen der Abwärtskompatibilität mit „C-Vorlagen“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy