Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Templates und #include

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.10.2006, 15:55 Uhr
~mighty-joe
Gast


Hallo,

ich hab ja jetzt nach einigem Trial-and-Error schon herrausgefunden, das wenn man eine Klasse unter Verwendung von Templates definiert und implementiert, die .cpp-Datei und nicht die Header-Datei includen muss.

Meine Frage ist nun, wie funktioniert das bei Klassen wie zum Beispiel "vector"?
Die Deklaration vector<int> v; lässt ja vermuten, das auch hier mit Templates gearbeitet wird. Jedoch binde ich ja auch nur die Header-Datei mittels #include <vector> ein.
Was geht da hinter der Bühne vor sich?

Cheers!

-joe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.10.2006, 16:10 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~mighty-joe:

Was geht da hinter der Bühne vor sich?



Nichts. Es ist nicht zwingend notwenig, eine .h und .cpp Datei zu schreiben und dann beide zu inkludieren: man kann auch einach eine schreiben oder aber einfach automatisch in #include Cpp Datei in der .h Datei machen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.10.2006, 16:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


die dateiendung ist ja eigentlich nur eine hilfe für den menschen, dem compiler ist das egal, für den ist das alles sourcecode. Einzige: manche Compiler (wie der VC) unterscheiden an der Endung ob C-Compiler oder C++-Compiler benutzt wird (z.b .cpp oder .c) Beim inkludieren wird aber immer der Compiler der Datei genommen in der das include steht (logisch irgendwo, include, genauergesagt der preprozessor nimmt ja den inhalt der datei und setzt ihn direkt da hin wo das include steht)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.10.2006, 18:31 Uhr
0xdeadbeef
Gott
(Operator)


Fürs Verständnis der Problematik: Es handelt sich bei einer template nicht um eine Klasse. Was du da schreibst, ist keine Vorlagenklasse, sondern eine Klassenvorlage, die bei Benutzung vom Compiler zu einer Klasse konkretisiert wird. Also: vector ist eine Klassenvorlage, vector<int> ist eine Klasse.

Der Compiler kann das erst konkretisieren, wenn er weiß, welche Parameter er dazu benutzen soll - also in diesem Beispiel dann, wenn

C++:
vector<int> v;


im Sourcecode steht. Da aber von nichts nichts kommt, muss der Compiler zu diesem Zeitpunkt den gesamten Code der Vorlage kennen. Deswegen definiert man templates vollständig im Header.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.10.2006, 23:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Da aber von nichts nichts kommt, muss der Compiler zu diesem Zeitpunkt den gesamten Code der Vorlage kennen. Deswegen definiert man templates vollständig im Header.

Was dann aber natürlich wichtig ist: Der Compiler generiert dann natürlich für jedes auftreten (bzw jeden "Typ" der Klassenvorlage) Bytecode der Klasse! Das bläst bei ka 400 unterschiedlichen Templateinstanzierungen die Anwendungen auf ein paar Mehr Megabyte auf
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.10.2006, 17:05 Uhr
0xdeadbeef
Gott
(Operator)


Bytecode? Wir sind hier doch nicht bei Java - du meinst Binärcode.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.10.2006, 17:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


äh ja ups
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: