C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

template und inline

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Babak Pourat
Guest





PostPosted: Mon Mar 07, 2005 9:21 am    Post subject: template und inline Reply with quote



Hallo,

Template-Definitionen stehen ja alle im H-File. Muss ich sie Deshalb als
inline Deklarieren? Sind sie implizit inline, oder besteht gar kein
zusammenhang?

Danke
Babak

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Stefan Reuther
Guest





PostPosted: Mon Mar 07, 2005 10:20 am    Post subject: Re: template und inline Reply with quote



Babak Pourat wrote:
Quote:
Template-Definitionen stehen ja alle im H-File. Muss ich sie Deshalb als
inline Deklarieren? Sind sie implizit inline, oder besteht gar kein
zusammenhang?

Hier besteht kein Zusammenhang. Wenn du sie nicht explizit als inline
definierst (bzw. dadurch inline machst, dass du die Memberfunktionen
einer Templateklasse innerhalb dieser Klasse definierst), sind sie nicht
inline.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Mon Mar 07, 2005 11:07 am    Post subject: Re: template und inline Reply with quote



Stefan Reuther wrote:

Quote:
Babak Pourat wrote:
Template-Definitionen stehen ja alle im H-File. Muss ich sie Deshalb als
inline Deklarieren? Sind sie implizit inline, oder besteht gar kein
zusammenhang?

Hier besteht kein Zusammenhang. Wenn du sie nicht explizit als inline
definierst (bzw. dadurch inline machst, dass du die Memberfunktionen
einer Templateklasse innerhalb dieser Klasse definierst), sind sie nicht
inline.

Verhalten tun sie sich aber trotzdem so. inline bedeutet in C++, daß es von
der Funktion mehrere Definitionen geben (ich also die "one definition rule
verletzen" kann, ohne daß es zu Fehlern führt. Das gleiche glit auch für
Templates.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Daniel Albuschat
Guest





PostPosted: Mon Mar 07, 2005 1:07 pm    Post subject: Re: template und inline Reply with quote

Babak Pourat wrote:
Quote:
Hallo,

Template-Definitionen stehen ja alle im H-File. Muss ich sie Deshalb als
inline Deklarieren?

Nein, musst du nicht. Du kannst sie auch wie andere Klassen/Funktionen
in Deklaration und Definition aufteilen. Ich persoenlich benutze
das so gut wie nie, weil die Syntax der Definition je nach Komplexitaet
des Templates schonmal argh komisch werden kann.

Hier ist ein Beispiel fuer einen einfachen Fall:

#include <iostream>

// Klassendeklaration
template<typename T>
struct foo {
void bar();
};

// Methodendefinition
template<typename T>
void foo<T>::bar() {
std::cout << "foo }

// Funktionsdeklaration
template<typename T>
void func();

// Funktionsdefinition
template<typename T>
void func() {
std::cout << "func }

int main() {
foo<int> f;
f.bar();
func<int>();
}

Trotzdem kannst du aber nicht die Definitionen in eine .cpp Datei
Packen, das du nur dazulinkst. Wenn du Deklaration und Definition
in Dateien auftrennen willst, musst du ein #include <foo.def>
am Ende der .h einbauen. Hier weiss ich gerade nicht, was sich als
Namenskonvention fuer solche Implementierungsdateien eingebuergert hat,
aber irgend was gab's da.

MfG,
Daniel

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Mon Mar 07, 2005 5:19 pm    Post subject: Re: template und inline Reply with quote

Rolf Magnus wrote:
Quote:
Stefan Reuther wrote:
Hier besteht kein Zusammenhang. Wenn du sie nicht explizit als inline
definierst (bzw. dadurch inline machst, dass du die Memberfunktionen
einer Templateklasse innerhalb dieser Klasse definierst), sind sie nicht
inline.

Verhalten tun sie sich aber trotzdem so. inline bedeutet in C++, daß es von
der Funktion mehrere Definitionen geben (ich also die "one definition rule
verletzen" kann, ohne daß es zu Fehlern führt. Das gleiche glit auch für
Templates.

Darauf ein klares "Jein".

Inline-Funktionen *müssen* in jeder Übersetzungseinheit definiert sein,
in der sie verwendet werden (3.2p3: "An inline function shall be defined
in every translation unit in which it is used.").

Templateklassen-Member *dürfen* in jeder Übersetzungseinheit definiert
sein, müssen aber nicht (3.2p5: "There can be more than one definition
of a ... class template (clause 14), nonstatic function template
(14.5.5), static data member of a class template (14.5.1.3), member
function template (14.5.1.1), or template specialization ...")

Demzufolge kann z.B. eine Übersetzungseinheit so aussehen:
----8<--------8<--------8<--------8<--------8<----
#include
template<class T>
struct foo {
foo();
};

template<class T>
foo<T>::foo()
{
std::cout << "hi.n";
}

template struct foo ----8<--------8<--------8<--------8<--------8<----
und eine andere so:
----8<--------8<--------8<--------8<--------8<----
template struct foo {
foo();
};

int main()
{
new foo<int>;
}
----8<--------8<--------8<--------8<--------8<----

Hier ist der Konstruktor foo muss er nicht in jeder Übersetzungseinheit definiert werden, solange
alle benötigten Spezialisierungen irgendwo explizit (wie hier) oder
implizit generiert werden.

Wenn der Konstruktor inline ist, muss er natürlich wieder überall
definiert sein.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Daniel Albuschat
Guest





PostPosted: Mon Mar 07, 2005 7:43 pm    Post subject: Re: template und inline Reply with quote

Stefan Reuther wrote:

Quote:
int main()
{
new foo<int>;
}

Dann mach wenigstens

Quote:
delete new foo<int>;

(wieso eigentlich new? Hat das einen bestimmten Grund?)

Wir wollen ja kein schlechtes Vorbild liefern. :)

Tschau,
Daniel

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.