Datos:¿Por qué debería usarse el modismo "PIMPL"?
El PIMPL Idiom (puntero a la implementación) es una técnica para ocultar la aplicación en la que una clase pública envuelve una estructura o clase que no puede ser visto fuera de la biblioteca de la clase pública es parte de.
Esto oculta los detalles de implementación interna y los datos del usuario de la biblioteca.
Al implementar este modismo, ¿por qué colocaría los métodos públicos en la clase pimpl y no en la clase pública ya que las implementaciones del método de clases públicas se compilarían en la biblioteca y el usuario solo tiene el archivo de encabezado?
Para ilustrar, este código pone la implementación Purr()
en la clase impl y lo envuelve también.
¿Por qué no implementar Purr directamente en la clase pública?
// header file:
class Cat {
private:
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat(); // Constructor
~Cat(); // Destructor
// Other operations...
Purr();
};
// CPP file:
#include "cat.h"
class Cat::CatImpl {
Purr();
... // The actual implementation can be anything
};
Cat::Cat() {
cat_ = new CatImpl;
}
Cat::~Cat() {
delete cat_;
}
Cat::Purr(){ cat_->Purr(); }
CatImpl::Purr(){
printf("purrrrrr");
}
Porque se debe evitar el modismo PIMP? .. – mlvljr
Excelente respuesta, y encontré que este enlace contiene información completa también: http://marcmutz.wordpress.com/translated-articles/pimp-my-pimpl/ – zhanxw
If Si desea hacer un codificador de mantenimiento después de un favor, recuerde que este es un patrón de ** interfaz **. No lo use para cada clase interna que hay. Para citar a Blade Runner, he visto cosas que tu gente no creería. – DevSolar