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

Guenther Thomsen tho at thomsen.isdn.cs.tu-berlin.de
Mo Aug 2 16:30:08 CEST 1999


In message <37A58277.2E77C824 at detewe.de>, "Michael Wiedmann" writes:
> Samy Khadem-Al-Charieh schrieb:
> 
> [...]
> > monom.cc
> > ----------------------------------------
> > #include "monom.h"
> > template<class t_type>
> > void monom<t_type>::print() {
> >         cout << m_coeff << "*x^" << m_order << endl;
> > }
> [...]
> 
> 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
voraus ueberlegen, welche Typen instantiiert werden koennen aber es
rettet die Modularitaet. 
 Nun das erwaehnte Buch ist schon recht alt, aelter als der C++ Standard
und dem g++ kann man nicht unbedingt vorauseilenden Gehorsam nachsagen.
Compiler andere Hersteller sind moeglicherweise in der Lage, auch ohne
die Hilfe des Programmierers und ohne Schnittstelle und Implementierung
zu vermischen, (nur) die notwendigen Instanzen zu erzeugen.

Guenther

[1] B. Stroustroup 'The C++ Programming Language 2. edition' p. 259



Mehr Informationen über die Mailingliste linux-l