Ich lese Scott Meyers Effektives C ++ . Er spricht über Merkmalsklassen, ich habe verstanden, dass ich sie brauche, um den Typ des Objekts während der Kompilierungszeit zu bestimmen, aber ich kann seine Erklärung darüber, was diese Klassen tatsächlich tun, nicht verstehen. (aus technischer Sicht)
Vielleicht erwarten Sie eine Art Magie, die Typeigenschaften zum Funktionieren bringt. Sei in diesem Fall enttäuscht - es gibt keine Magie. Typeigenschaften sind manuell für jeden Typ definiert. Betrachten Sie zum Beispiel iterator_traits
, das typedefs (z. B. value_type
) für Iteratoren bereitstellt.
Mit ihnen können Sie
schreiben %Vor% Aber damit dies funktioniert, gibt es tatsächlich eine explizite Definition irgendwo im Header <iterator>
, die etwa so lautet:
Dies ist eine teilweise Spezialisierung vom Typ iterator_traits
für Typen der Form T*
, d. h. Zeiger eines generischen Typs.
Im gleichen Sinne sind iterator_traits
auf andere Iteratoren spezialisiert, z. typename vector<T>::iterator
.
Traits-Klassen bestimmen nicht den Typ des Objekts. Stattdessen stellen sie zusätzliche Informationen zu einem Typ bereit, indem sie typedefs oder Konstanten im Merkmal definieren.