linux-l: C++ (templates, operator overloading)

Guenther Thomsen tho at thomsen.isdn.cs.tu-berlin.de
Di Aug 3 21:26:28 CEST 1999


In message <37A5E772.516FDB59 at faphida.in-berlin.de>, Mathias Born writes:
> Guenther Thomsen wrote:
> > > Die Defintion der Template-Methoden darf natürlich nicht in einer
> >       ^^^^^^^^^
> > > CC-Datei
> > > stehen, sondern in der zugehörigen H-Datei, also ungefähr so:
> >  [..]
> >  Wat? Im Stroustroup steht explizit [1] 'When a function definition is
> > needed for a class template member function, for a particular type, it
> > is the implementation's job to find the template for the member function
> > and generate the appropriate version.'. Und weiter 'An implemmentation
> > may require the programmer to help find templates unless some convention
> > is obeyed'. Genau das tut g++. Nicht schoen, vor allem muss man sich im
> > ...
> 
> Da g++ diesen "job of the implementation" nicht vernünftig beherrscht,
> muß man tatsächlich für jeden benutzten Typ manuell instantiieren.
 Der g++ steht da nicht alleine da. Ich habe hier in die 'M$ Visual C++ 5.0 
Language Reference' (nun fragt mich nicht, warum ich die habe ;-) ge-
schaut. Dort heisst es unter 'Differences from Other Implementations' u.a. 
'... The compiler cannot instantiate a template outside of the module in
which it is defined.'. Was bietet da VC++ 6.0?

> Das ist aber *nicht* die Art und Weise, wie ich mir die Verwendung
> von Templates vorstelle. Der Vorteil der Templates ist ja gerade
> die Automatisierung.
 Zumindest bleibt einem die Arbeitseinsparung/erleichterte Wartung.

> Deshalb war der Tip von Michael, alles in die
> Header-Datei zu packen, sehr gut!
 Wenn man dafuer die Modularitaet opfern moechte. Wenn man, und ich denke
bei Samys Programm koennte dies der Fall sein, im voraus weiss, welche
Typen verwendet werden, muss das nicht sein.

> Siehe auch die STL - die besteht praktisch nur aus Header-Dateien.
 Evtl. aus Kompatibilitaetsgruenden, s.o.; wenn ich es richtig gelesen habe,
unterliegt AT&Ts cfront nicht solchen Einschraenkungen.

> 
> Ich kann den g++-Machern aber keinen Vorwurf daraus stricken,
> schließlich war der Template-Entwurf übereilt, als Folge davon
> ist die korrekte Realisierung im Compiler mit einem enormen
> Aufwand verbunden.
 Mag schon sein. Der Auszug stammt jedoch aus einem Buch von 1991. In den
6 Jahren bis zum Standard haette man das doch richten koennen.
 Lass uns lieber aufhoeren, bevor dies noch ein 'warum C++ ungeeignet,
unbrauchbar, <insert the name of your favorite programming language here>
unterlegen ist'-thread wird ;-)

Guenther



Mehr Informationen über die Mailingliste linux-l