001
18.08.2006, 16:35 Uhr
Th
|
Traits (engl. für Merkmale) dienen dazu, eine Template-Klasse allgemeingültiger gegenüber den Parametern zu machen, d.h. das Verhalten bestimmter Werte oder Funktionen wird mittels dieser Trait-Parameter bestimmt.
Ein Beispiel ist das Template std::basic_string welches nicht nur den internen Zeichentyp, sondern auch einen Trait-Parameter (plus Allocator) erwartet.
Die Template-Klasse std::char_traits implementiert dann das Verhalten der verschiedenen Zeichen-Typen (char, wchar_t, ...).
Bei der Template-Klasse std::iterator_traits werden die Datentypen für die Iterator-Operatoren per typedef definiert. Durch Template-Spezialisierungen können dann explizite Datentypen definiert werden (z.B. für die Zeigertypen Type* und const Type*), welche sonst kein korrektes Verhalten zeigen würden, z.B. ein Iterator auf einen Zeiger ist immer noch ein Zeiger und kein Zeiger auf nen Zeiger etc. |