🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#1840
Author: Gerhard Traeger
Date: Fri, 15 Mar 1996 21:46
36 lines
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
#1850
Author: Ullrich von Bassewitz
Date: Sat, 16 Mar 1996 21:53
64 lines
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