2012-03-20 6 views

Respuesta

21

simple:

typedef LONGNAME LN; 

typedefs se utilizan en C++ un poco como "variables que pueden almacenar tipos". Ejemplo:

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

    WheelCollection wheels; 
}; 

Mediante el uso de Car::WheelCollection todas partes en lugar de std::vector<Wheel>, puede cambiar el tipo de contenedor en un lugar y tener todo el código refleje los cambios. Esta es la forma C++ de abstraer tipos de datos (mientras que, por ejemplo, en C# tendrías una propiedad que devuelve IEnumerable<Wheel>).

+0

Cuando publicaste eso como respuesta y no como comentario, deberías haber mostrado un poco más de cortesía para explicar al menos los conceptos básicos. –

+0

@Rohit: ¿Qué conceptos básicos? Typedef es la declaración más simple de C++, y no hay nada que saber, excepto haberlo visto una vez. –

+0

Una pequeña teoría sobre cómo usarlo. o qué es un typedef, etc. sería una gran respuesta –

6

Usted puede utilizar la palabra clave typedef:

typedef LONGNAME LN; 

También puede hacer algo como:

typedef class { 

... 

} LN; 

Editar: Usted puede tener problemas al usar las plantillas sin embargo. Consulte here para una posible solución.

+1

El enlace proporcionado no está relacionado, ya que se trata de plantillas, no de clases, y esas son bestias completamente diferentes. –

+0

@ DavidRodríguez-dribeas Pensé que el OP también podría ser interesante en las clases de plantillas 'typedef'ing. – ApprenticeHacker

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

class abc 
{ 
}; 

typedef abc XYZ; // for user written classes. 

Typedef le permite alias una clase o nombre de tipo de datos con un nombre más sensible al contexto correspondiente al escenario.

6

Además de las respuestas ya proporcionadas con la palabra clave typedef, también puede utilizar la palabra clave using desde C++ 11. En mi humilde opinión, parece más consistente con respecto al aliasing.

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

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

Además, con using que son capaces de clases de plantilla (alias How to typedef a template class?) mediante el uso de alias templates.

template<typename T> class LONGNAME {}; 
template<typename T> using LN = LONGNAME<T>; // alias template 
Cuestiones relacionadas