2012-03-20 6 views

risposta

21

Semplice:

typedef LONGNAME LN; 

typedef sono utilizzati in C++ un po 'come "variabili in grado di memorizzare i tipi". Esempio:

class Car 
{ 
public: 
    typedef std::vector<Wheel> WheelCollection; 

    WheelCollection wheels; 
}; 

Utilizzando Car::WheelCollection ovunque al posto di std::vector<Wheel>, è possibile modificare il tipo di contenitore in un posto e avere tutto il vostro codice riflettere le modifiche. Questo è il modo C++ per astrarre i tipi di dati (mentre ad esempio in C# avresti una proprietà che restituisce IEnumerable<Wheel>).

+0

Quando l'hai postato come risposta e non commento dovresti mostrare un po 'più di cortesia per spiegare almeno le basi. –

+0

@Rohit: quali nozioni di base? Typedef è la più semplice dichiarazione di C++, e non c'è nulla da sapere se non averlo visto una volta. –

+0

Una piccola teoria su come usarlo. o che cos'è un typedef, ecc. sarebbe un'ottima risposta –

6

È possibile utilizzare la parola chiave typedef:

typedef LONGNAME LN; 

Si può anche fare qualcosa di simile:

typedef class { 

... 

} LN; 

Edit: Si può incorrere in problemi quando si utilizzano i modelli però. Vedere here per una possibile soluzione.

+1

Il collegamento fornito non è correlato, in quanto si tratta di modelli, non di classi e di bestie completamente diverse. –

+0

@ DavidRodríguez-dribeas Ho solo pensato che l'OP potesse essere interessante anche nelle classi template typedef'ing. – ApprenticeHacker

1
typedef int mark; // for in built data types 

class abc 
{ 
}; 

typedef abc XYZ; // for user written classes. 

Typedef vi permette di trasformare un nome di classe o di tipo di dati con un contesto più sensibile nome corrispondente allo scenario.

6

Oltre alle risposte già fornite utilizzando la parola chiave typedef, è anche possibile utilizzare la parola chiave using dal C++ 11. IMHO sembra più coerente per quanto riguarda l'aliasing.

namespace longname{ } 
namespace ln = longname;// namespace aliasing 

class LONGNAME {}; 
using LN = LONGNAME; // "class aliasing" 

Inoltre, con using siete in grado di classi template alias (How to typedef a template class?) utilizzando alias templates.

template<typename T> class LONGNAME {}; 
template<typename T> using LN = LONGNAME<T>; // alias template 
Problemi correlati