Thread View: de.comp.lang.c++
2 messages
2 total messages
Started by Gerhard Traeger
Fri, 15 Mar 1996 21:46
most-faq: template instantiation&compiler specifics
Author: Gerhard Traeger
Date: Fri, 15 Mar 1996 21:46
Date: Fri, 15 Mar 1996 21:46
36 lines
2419 bytes
2419 bytes
uz@wuschel.ibb.schwaben.com (Ullrich von Bassewitz) hat geschrieben: >> Nein! Es ist eben, so wie ich es auch beschrieben hatte, genau der Schoepfer >> der Library, der bei der "expliziten Instantiierung" festlegt, welche >> Instanzen erzeugt werden! Und ich hatte auch versucht Dir zu erklaeren, dass >> das bei groesseren Programmen eine notwendige Aufgabenteilung ist. > > Dann habe ich das wirklich nicht verstanden. Grundprinzip: Arbeitsteilung. > Du kannst mir ja nochmal erklaeren, wie denn derjenige, der eine Bibliothek > schreibt von vorneherein wissen kann Nicht von vorneherein, sondern aus seinem Lastenheft. Bei einer normalen Funktionen-Bibliothek stellt sich diese Frage doch auch (nicht). > mit welchen Argumenten seine Templates instantiiert werden. Weil er es selber tut. Templates degenerieren damit zu einer Zusammenfassung einer endlichen Zahl von Klassen. Die nicht-inline-Template-Member-Funktionen um die es hier geht, sind dann als ganz normale Funktionen zu betrachten, die in der Quelle lediglich etwas komprimiert geschrieben wurden. Zumindest g++2.7.2 und SUN C++ 4.0.1 vertragen es uebrigens auch, wenn man (z.B. wegen Eigenheiten einzelner Argument-Typen) Template-Member-Funktionen fuer spezielle Typen als eigenstaendige Funktionen codiert. > Wenn er das nicht weiss, wie soll dann eine explizite Instantiierung > in der Bibliothek funktionieren? Da er das weiss, gibt es dieses Problem nicht. Falls Du Schwierigkeiten hast, zu verstehen, warum er das meist weiss: Matrix-Operationen lassen sich wunderbar mit Templates implementieren, aber was ist bitte die Inverse einer String-Matrix? Wie Du Dir sicher vorstellen kannst, sind die wenigsten Programmierer damit beschaeftigt, zum x-ten Mal die STL (oder andere Standardbibliotheken mit Standardtypen) zu implementieren. Je spezieller die Funktionen werden, desto groesser wird auch die Wahrscheinlichkeit, dass der zulaessige/sinnvolle Parameterraum der Template-Argumente recht uebersichtlich bleibt. MfG, Gerhard
Re: most-faq: template instantiation&compiler specifics
Author: Ullrich von Bassewitz
Date: Sat, 16 Mar 1996 21:53
Date: Sat, 16 Mar 1996 21:53
64 lines
2972 bytes
2972 bytes
Gerhard Traeger (gerhard@gt-priv.m.eunet.de) wrote:
> > Dann habe ich das wirklich nicht verstanden.
> Grundprinzip: Arbeitsteilung.
Nu gut, das mit der Arbeitsteilung ist klar, dazu sind Bibliotheken
schliesslich da. Das sagt bisher aber noch ueberhaupt nichts ueber explizite
Instantiierung aus.
> > Du kannst mir ja nochmal erklaeren, wie denn derjenige, der eine Bibliothek
> > schreibt von vorneherein wissen kann
> Nicht von vorneherein, sondern aus seinem Lastenheft. Bei einer normalen
> Funktionen-Bibliothek stellt sich diese Frage doch auch (nicht).
Haeh? Was bitteschoen ist ein Lastenheft? Und wieso stellt sich die Frage
bei einer normalen "Funktionen-Bibliothek" nicht? Und inwiefern ist eine
solche mit einer Template-Klasse vergleichbar?
> > Wenn er das nicht weiss, wie soll dann eine explizite Instantiierung
> > in der Bibliothek funktionieren?
> Da er das weiss, gibt es dieses Problem nicht. Falls Du Schwierigkeiten hast,
> zu verstehen, warum er das meist weiss: Matrix-Operationen lassen sich
> wunderbar mit Templates implementieren, aber was ist bitte die Inverse
> einer String-Matrix?
Das scheint mir irgendwie drumherumgeredet zu sein (soll heissen, Du hast
nicht erklaert, warum er das weiss bzw. ich versteh's immer noch nicht).
Vielleicht kannst Du mir das ja mal anhand eines konkreten Beispiels aus
einer Bibliothek von mir erklaeren. Bei dem Beispiel weiss ich, dass mir
die explizite Template Instantiierung von g++ regelmaessig jede Menge
Aerger bringt:
template <class T>
class ListBox: public WindowItem {
protected:
Collection<T>* Coll; // Collection used
....
};
Das ist eine Listbox fuer ein Fenster auf dem Bildschirm in dem alles
moegliche dargestellt werden kann, was sich in der Collection befindet (eine
Art dynamisches Array).
Also jetzt mal konkret: Wie kann ich im Vorfeld alle moeglichen expliziten
Instantiierungen vornehmen? Das ist mir vor allem deshalb voellig
schleierhaft, weil "class T" in praktisch allen Faellen eine Klasse ist, die
es in der Bibliothekt ueberhaupt nicht gibt (weil das, was in der Listbox
auf dem Bildschirm dargestellt werden soll eben von vorneherein nicht
bekannt ist).
Also irgendwie habe ich das Gefuehl, dass ich entweder die Frage/das Problem
*voellig* missverstanden habe, oder das jemand anderes im Nebel
rumargumentiert...
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads