002
26.10.2004, 09:55 Uhr
virtual
Sexiest Bit alive (Operator)
|
Einen Anwendungsfall kann ich mir eigentlich nur in folgenden Situationen vorstellen: man hat nette Templatefunktionen geschrieben und die tun es eben nur für integer typen, für Fließkomma zahlen sind sie sinnlos.
Im folgenden Beipiel gibt es zB eine Templatefunktion namen fac. Da wir hier nur die einfache art der Fakultät berechnen wollen, wollen wir eigentlich nicht in die Situation kommen, daß dieses Template für nicht integrale typen benutzt wird:
C++: |
#include <limits>
// Vereinfachte Fakultaetsberechnung, // läßt sich nur for integrale Typen instanziieren template<typename I> I fac(I n) { typedef char type_is_exact_guard[std::numeric_limits<I>::is_exact]; return n? n*fac(n-1):1; }
int main() { fac<int>(10); fac<float>(10); // FEHLER! }
|
Und tatsächlich sollte der Compiler bei der Zeile, die mit "FEHLER!" markiert ist, einen Fehler werfen.
Das Prinzip ist eigentlich einfach: man bildet typen, meist arrays in der Funktion. Ist die bedingung erfüllt (in Abh. von den Templateparametern), ist die Array dimension >0, ist sie nicht erfüllt, wird die Dimension <=0, was einen Compilerfehler verursacht. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 26.10.2004 um 09:56 Uhr von virtual editiert. |