Algo que me he encontrado haciendo a menudo últimamente es declarar typedefs relevantes para una clase particular dentro de esa clase, es decir
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Estos tipos se usan luego en otra parte del código:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Razones por las que me gusta:
- Reduce el ruido introducido por las plantillas de clase, se
std::vector<Lorem>
convierteLorem::vector
, etc. - Sirve como una declaración de intenciones: en el ejemplo anterior, la clase Lorem está destinada a ser contada por referencia
boost::shared_ptr
y almacenada en un vector. - Permite que la implementación cambie, es decir, si Lorem necesita ser cambiado para contar de manera intrusiva (vía
boost::intrusive_ptr
) en una etapa posterior, esto tendría un impacto mínimo en el código. - Creo que se ve más bonito y podría decirse que es más fácil de leer.
Razones por las que no me gusta:
- A veces hay problemas con las dependencias: si desea incrustar, por ejemplo, un
Lorem::vector
dentro de otra clase pero solo necesita (o desea) declarar Lorem (en lugar de introducir una dependencia en su archivo de encabezado), entonces terminará teniendo que usar el tipos explícitos (por ejemplo, enboost::shared_ptr<Lorem>
lugar deLorem::ptr
), lo cual es un poco inconsistente. - Puede que no sea muy común y, por lo tanto, más difícil de entender.
Trato de ser objetivo con mi estilo de codificación, por lo que sería bueno obtener algunas otras opiniones al respecto para poder analizar un poco mi pensamiento.