Compartir a través de


Pimpl para encapsulación en tiempo de compilación (C++ moderno)

La expresión pimpl es una técnica moderna de C++ para ocultar la implementación, minimizar el acoplamiento y separar interfaces. Pimpl es la abreviatura de "puntero a la implementación". Es posible que ya esté familiarizado con el concepto, pero que lo conozca por otros nombres como expresión Cheshire Cat o Compiler Firewall.

¿Por qué usar pimpl?

Así es como la expresión pimpl puede mejorar el ciclo de vida de desarrollo de software:

  • Minimización de dependencias de compilación.

  • Separación de la interfaz y la implementación.

  • Portabilidad.

Encabezado de pimpl

// my_class.h
class my_class {
   //  ... all public and protected stuff goes here ...
private:
   class impl; unique_ptr<impl> pimpl; // opaque type here
};

La expresión pimpl evita las cascadas de recompilación y los diseños de objetos frágiles. Es adecuado para tipos conocidos (transitivamente).

Implementación de pimpl

Defina la clase impl en el archivo .cpp.

// my_class.cpp
class my_class::impl {  // defined privately here
  // ... all private data and functions: all of these
  //     can now change without recompiling callers ...
};
my_class::my_class(): pimpl( new impl )
{
  // ... set impl values ...
}

procedimientos recomendados

Considere si debe agregar compatibilidad con la especialización de intercambio que no produce excepciones.

Consulte también

Aquí está otra vez C++
Referencia del lenguaje C++
Biblioteca estándar de C++