PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Templates



TrollSlayer
13-04-2004, 09:00
Hallo!
Wie kann ich in C++ die Erzeugung von Funktionen für alle möglichen Datentypen aus einem Template verhindern und nur die Funktionen erzeugen lassen, die tatsächlich im Programm gebraucht werden? Ist es überhaupt möglich, ohne auf die Templates zu verzichten? gcc hat die Option -fno-implicit-templates aber wenn ich diese verwende meldet der Linker einen Fehler (undefined reference ...).

Vielen Dank im voraus!

wraith
13-04-2004, 09:52
Original geschrieben von TrollSlayer

Wie kann ich in C++ die Erzeugung von Funktionen für alle möglichen Datentypen aus einem Template verhindern und nur die Funktionen erzeugen lassen, die tatsächlich im Programm gebraucht werden?
Es werden nur die Funktionen erzeugt, die auch wirklich gebraucht werden, und keine mehr.



gcc hat die Option -fno-implicit-templates aber wenn ich diese verwende meldet der Linker einen Fehler (undefined reference ...).

Wenn du diese Option verwendest, dann mußt du jede Funktion für jeden Datentyp, den du verwendest explicit instanziieren.
Bsp kompiliert mit -fno-implicit-templates gibt Linkerfehler


template<typename T>
T max(T lhs,T rhs)
{
return lhs > rhs ? lhs : rhs;
}

int main()
{
int a = 1,b = 2,c;

c = max(a,b);
}

Füge noch eine explizite Instanziierung hinzu und es funktioniert


template int max(int,int);

Das gibt dir vielleicht mehr Kontrolle, aber macht auch mehr Arbeit, und den Sinn sehe ich nicht.

TrollSlayer
13-04-2004, 13:39
Vielen Dank für die Erklärung!