Dato le ulteriori informazioni sui modelli, ora possiamo rispondere.
Il caso d'uso è quando si desidera specializzarsi sul tipo di modello. Un esempio tipico è il seguente:
template <typename T>
struct nonconst {
typedef T t;
};
template <typename T>
struct nonconst<T const> {
typedef T t;
};
Questo permette in modo efficace di rimuovere il qualificatore const
da qualsiasi tipo:
nonconst<int>::t x;
nonconst<int const>::t y;
assert(typeid(x) == typeid(int));
assert(typeid(y) == typeid(int));
Ci sono molti simili casi d'uso, ad esempio, per aggiungere (o rimuovere) il qualificatore puntatore da un tipo, fornire valori predefiniti e specializzazioni per determinati tipi, ecc.
Tuttavia, notare il diverso involucro dei nomi dei tipi! I tipi uguali in typedef T T
sono illegali in C++. [I stare corretto: §7.1.3.2] Inoltre, lo standard di fatto denominazione (cementata dal suo uso in librerie Boost) è chiamare il nome del tipo alias type
, ad esempio:
typedef T type;
fonte
2010-02-04 12:01:25
Sei sicuro di non aver detto: 'typedef struct sometype sometype;'? –
quindi un esempio concreto sarebbe 'typedef char char'? – SiegeX
Mi sono chiesto il codice di esempio, non credevo potesse essere compilato. Provato. Può: 'struct A {int x; }; int main() {typedef A A; Aa; ritorno 0; } ' – Notinlist