Aufgrund Ihrer zusätzlichen Informationen über Vorlagen können wir nun antworten.
Der Anwendungsfall ist, wenn Sie sich auf den Typ einer Vorlage spezialisieren wollen. Ein typisches Beispiel ist das folgende:
template <typename T>
struct nonconst {
typedef T t;
};
template <typename T>
struct nonconst<T const> {
typedef T t;
};
Auf diese Weise können Sie die const
Qualifier von cualquier Typ:
nonconst<int>::t x;
nonconst<int const>::t y;
assert(typeid(x) == typeid(int));
assert(typeid(y) == typeid(int));
Es gibt viele ähnliche Anwendungsfälle, z. B. das Hinzufügen (oder Entfernen) des Zeigerqualifizierers aus einem Typ, das Bereitstellen von Standardwerten und Spezialisierungen für bestimmte Typen usw.
Allerdings, Beachten Sie das unterschiedliche Gehäuse der Typennamen! Gleiche Typen in typedef T T
sind illegale C++. [Ich habe mich korrigiert: §7.1.3.2] Darüber hinaus ist der de-fact-Namensgebungsstandard (zementiert durch seine Verwendung in Boost-Bibliotheken), den Typnamen alias zu nennen type
, z.B.:
typedef T type;