2010-02-25 8 views
19

Ich nehme eine C++ - Klasse und mein Lehrer erwähnte beiläufig, dass das Schlüsselwort typename in C++ existiert (im Gegensatz zur Verwendung des Schlüsselwortes class in eine Vorlage Deklaration), für die Abwärtskompatibilität mit "C-Vorlagen."Gibt es das Schlüsselwort typenname in C++, aus Gründen der Abwärtskompatibilität mit "C templates?"

Dies blies meine Meinung. Ich habe nie gesehen gesehen oder gehört erzählen von allem wie C++ Vorlagen (außer vielleicht der Präprozessor ... und das ist nicht wirklich die gleiche Sache überhaupt) in ANSI C. Also, habe ich etwas vermisst riesigen irgendwo, oder ist das ist eine wirklich esoterische Erweiterung von gcc oder etwas, oder ist mein Lehrer weg von der Basis?

+25

Können Sie einen neuen Lehrer bekommen? – SLaks

+0

Um ehrlich zu sein, mag ich diesen Lehrer wirklich. Er ist mit Abstand der beste Programmierlehrer, den ich an dieser Universität kennengelernt habe. Ich werde es vermeiden, zu spezifizieren, welche Universität (und welche Lehrer) um ihrer willen. – ELLIOTTCABLE

+1

(Um einen Vergleich zu geben, hat uns einer der früheren Lehrer, der einen C-Kurs unterrichtet, angewiesen, "jede Datei mit der Zeile' void main() {'zu starten. Da sind so viele Dinge falsch, ich weiß es nicht einmal wo ich anfangen soll ... das grellste Wesen, für mich, 'main()' a 'void' Rückgabetyp. Das ist so un-UNIX) -: ELLIOTTCABLE

Antwort

0

Das scheint nicht richtig. typename ist kein reserviertes Wort in C

Vielleicht meckerten sie/erinnerten sich und dachten an "C with Classes".

2

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

3

Ihr Lehrer macht Dinge aus. Es gibt nicht so etwas wie Vorlagen in C. Das typename Schlüsselwort aus zwei Gründen besteht:

  1. Es macht mehr Sinn als template<typename T>template<class T> zu sagen, da T Nicht-Klasse-Typen wie int oder double sein kann.

  2. Es kann verwendet werden, um Parsing-Ambiguitäten in Deklarationen wie A::B * foo; zu lösen. Erklärt dies eine Variable mit dem Namen foo, oder ist es ein Multiplikationsausdruck? (Antwort:. Es ist, als letztere analysiert Um es eine Erklärung typename A::B *foo; schreiben, die die Compiler A::B als Typnamen zu interpretieren sagen, kein Variablenname.)

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

5

Vielleicht ist der Begriff Ihres Lehrer wurde nach dem Vorbild der war Ziel „mit C Typen ... für die Rückwärtskompatibilität“, das heißt, zu erkennen das Problem, dass template<class T> irreführend ist, wenn T ein C-Stil gebaut ist -in Typ wie char oder int, wie andere gesagt haben. Aber das ist keine Klasse! :-)

Vor einer Weile ein paar GCC Leute waren suggesting, dass machen die Vorlage Maschinen zu den C-Compiler verfügbar wäre ein guter Weg, um C99 zu implementieren ist <tgmath.h>, aber das scheint nicht zu etwas gekommen zu sein.

0

Ich möchte sagen, dass C nicht wirklich eine native Vorlage Zeug haben, können Sie aber es funktioniert mit irgendeiner Art eines MetaProgramming, take a look rund um die Web fein machen finden Sie, wie ...

Eine weitere wichtige Sache zu sagen ist, dass C eine Programmiersprache für allgemeine Zwecke ist, so dass viele Dinge wie Objektorientierung, Vorlage und einige andere Dinge mit ein wenig mehr Aufwand getan werden können.

Projekte wie Gnome sind der Beweis, dass es sehr gut gemacht werden kann.

S.S .: Sorry über mein schreckliches Englisch !!!

Verwandte Themen