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 

Re: function template nur in header-datei möglich?

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





PostPosted: Wed Jan 25, 2006 3:07 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote



Rolf Magnus wrote:
Quote:
Dietmar Kuehl wrote:

Ernst Murnleitner wrote:
Ein Template muss ja im header-file definiert sein.
Kann man das irgendwie umgehen.

Ja. Es gibt zwei Möglichkeiten:

1. Man kann Templates exportieren. Dazu braucht man allerdings einen
Compiler, der dies unterstützt, und diese sind derzeit eher
dünn gesät (einige EDG-basierte Compiler unterstützen derzeit
export, etwa Comeau und Intel).
2. Man kann die Templates in dem File, wo man sie definiert,
explizit für die benötigten Typen instanziieren. Diese Möglichkeit
unterstützen eigentlich alle Compiler, allerdings ist das nur
praktikabel, wenn man relativ wenige Typen hat, für die man das
Template instanziieren will.

3. Die Implementation einfach in ein Implementationsfile schreiben und
dieses am Ende der Headerdatei #includen und nicht als eigene
Übersetungseinheit durch den Compiler laufen lassen.

In welchem Sinne ist das Template in diesem Fall nicht im Header-File
definiert? Alles, was in einem Header-File eingebunden wird, gehört
für mich zu dem Header-File, auch Files, die eigentlich eher nach
Implementierungen aussehen. Aus organisatorischer Sicht mag es es
einen Unterschied geben, aus Compiler-Sicht jedoch nicht.
--
<mailto:dietmar_kuehl (AT) yahoo (DOT) com> <http://www.dietmar-kuehl.de/>
<http://www.eai-systems.com> - Efficient Artificial Intelligence

--
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: Wed Jan 25, 2006 3:41 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote



Dietmar Kuehl wrote:

Quote:
3. Die Implementation einfach in ein Implementationsfile schreiben und
dieses am Ende der Headerdatei #includen und nicht als eigene
Übersetungseinheit durch den Compiler laufen lassen.

In welchem Sinne ist das Template in diesem Fall nicht im Header-File
definiert? Alles, was in einem Header-File eingebunden wird, gehört
für mich zu dem Header-File, auch Files, die eigentlich eher nach
Implementierungen aussehen. Aus organisatorischer Sicht mag es es
einen Unterschied geben, aus Compiler-Sicht jedoch nicht.

Ich hatte angenommen, daß es gerade um die organisatorische Sicht geht. Die
Implementationen stehen physikalisch nicht in der Header-Datei, sondern wie
von den anderen Klassen gewohnt in einer extra-Implementationsdatei. Wie
das aus Compiler-Sicht aussieht, ist dabei doch eigentlich egal, oder?

--
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
Dietmar Kuehl
Guest





PostPosted: Wed Jan 25, 2006 10:14 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote



Rolf Magnus wrote:
Quote:
Ich hatte angenommen, daß es gerade um die organisatorische Sicht geht.
Die Implementationen stehen physikalisch nicht in der Header-Datei,
sondern wie von den anderen Klassen gewohnt in einer
extra-Implementationsdatei. Wie das aus Compiler-Sicht aussieht, ist dabei
doch eigentlich egal, oder?

Das sehe ich anders! Wenn man z.B. mit Optimierung compiliert, dann
kann es ganz schnell zu langen Compilierzeiten kommen, wennn man
komplexe Template-Systeme in Headern implementiert. Zum Beispiel
macht es einen signifikanten Unterschied, ob IOStreams und Locales
in Headern implementiert werden oder dort nur deklariert werden und
in separaten Files instantiiert werden, insbesondere wenn mit
Optimierung kompiliert wird.
--
<mailto:dietmar_kuehl (AT) yahoo (DOT) com> <http://www.dietmar-kuehl.de/>
<http://www.eai-systems.com> - Efficient Artificial Intelligence

--
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
Dietmar Kuehl
Guest





PostPosted: Thu Jan 26, 2006 12:30 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote

Stefan Ram wrote:

Quote:
Dietmar Kuehl <dietmar_kuehl (AT) yahoo (DOT) com> writes:
Das sehe ich anders! Wenn man z.B. mit Optimierung compiliert, dann
kann es ganz schnell zu langen Compilierzeiten kommen, wennn man
komplexe Template-Systeme in Headern implementiert.

From: Roedy Green
Message-ID: <kcndt1ti9s1mn2236p7gkg7rrn0813ee6k (AT) 4ax (DOT) com

(...)

A story. Back in my youth there was an Algol program to compute the
Nth prime of a certain class. For some reason the program took days
to compile. However when it executed it took no time at all. It had
at compile time unraveled the entire code so that the final program
was essentially

print("20988936657440586486151264256610222593863921");

Das ist der eine Teil der Geschichte. Der andere ist, dass es keinen
guten Grund gibt, die gleiche Berechnung in jeder Translation-Unit
zu machen. Wenn es nur relativ wenige Instanziierungen gibt, die aber
oft genutzt werden, wie etwa bei IOStreams und locales (dort gibt es
de facto eigentlich nur zwei Instanziierungen, obwohl es theoretisch
möglich wäre, die Klassen auch noch für andere Typen zu
instanziieren), dann kann man viel Zeit sparen, sie explizit zu
instanziieren.
--
<http://www.eai-systems.com> - Efficient Artificial Intelligence

--
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: Thu Jan 26, 2006 5:22 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote

Dietmar Kuehl wrote:
Quote:
Rolf Magnus wrote:
Ich hatte angenommen, daß es gerade um die organisatorische Sicht geht.
Die Implementationen stehen physikalisch nicht in der Header-Datei,
sondern wie von den anderen Klassen gewohnt in einer
extra-Implementationsdatei. Wie das aus Compiler-Sicht aussieht, ist dabei
doch eigentlich egal, oder?

Das sehe ich anders! Wenn man z.B. mit Optimierung compiliert, dann
kann es ganz schnell zu langen Compilierzeiten kommen, wennn man
komplexe Template-Systeme in Headern implementiert.

Dafür ist es aber irrelevant, ob der viele Extra-Code im Header oder in
einer physikalisch anderen Datei steht. Wenn der Code da ist, kostet er
Compilezeit. Und wenn der Entwickler sein Handwerk versteht, ist der
Code nur dann da, wenn es wirklich unbedingt notwendig ist. Und wenn
also die Notwendigkeit besteht, viel Template-Code in einem Header
unterzubringen, ist die Trennung in ".h" und inkludierte ".cc" durchaus
nicht unpraktisch. Da kann man z.B. die "zeige-mir-die-Definition-
dieser-Funktion"-Funktion seines Editors benutzen.

Dass es damit leicht ist, Bloat und ewig lange brauchende Compilerläufe
zu fabrizieren, ist natürlich klar. Aber dass es in C++ besonders
einfach ist, durch Nachlässigkeit Bloat zu erzeugen, ist glaube ich
nichts neues.


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
kanze
Guest





PostPosted: Fri Jan 27, 2006 3:01 pm    Post subject: Re: function template nur in header-datei möglich? Reply with quote

Stefan Reuther wrote:
Quote:
Dietmar Kuehl wrote:
Rolf Magnus wrote:
Ich hatte angenommen, daß es gerade um die organisatorische
Sicht geht. Die Implementationen stehen physikalisch nicht
in der Header-Datei, sondern wie von den anderen Klassen
gewohnt in einer extra-Implementationsdatei. Wie das aus
Compiler-Sicht aussieht, ist dabei doch eigentlich egal,
oder?

Das sehe ich anders! Wenn man z.B. mit Optimierung
compiliert, dann kann es ganz schnell zu langen
Compilierzeiten kommen, wennn man komplexe Template-Systeme
in Headern implementiert.

Dafür ist es aber irrelevant, ob der viele Extra-Code im
Header oder in einer physikalisch anderen Datei steht. Wenn
der Code da ist, kostet er Compilezeit.

Das stimmt nur teilweise. Wenn ich eine Klasse C mit den
Funktionnen f(), g() und h() definiere, liest der Compiler bei
der Compilierung von Client-Code lediglich nur die
Klassen-Definition, nicht aber die Definitionen der Funktionnen.
Auch dann, wenn ich die Funktion aufrufe. Ist aber C ein
Template, dann liest der Compler die ganzen
Funktiondefinitionnen bei jeder Compilierung von Client-Code.
Und häufig, wenn ich die Funktion f() aufrufe, wird sie auch
vollig kompliliert -- wenn ich sie in zwanzig unterschiedenen
Moduln benutze, dann wird bei einem kompletten Build derselbe
Code zwanzigmal compiliert, statt nur einmal.

Quote:
Und wenn der Entwickler sein Handwerk versteht, ist der Code
nur dann da, wenn es wirklich unbedingt notwendig ist.

Die meisten Compiler sagen, dass die vollständige Definition der
Funktion notwendig ist, sofort die Funktion einen Template ist,
und benutzt wird. Bei nicht Templates kann ich die Funktion
benutzen, ohne dass der Compiler seine Implementierung sieht.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

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