Pimpl para o encapsulamento de tempo de compilação (C++ moderno)

A linguagem de pimpl é uma técnica moderna C++ ocultar a implementação, minimizar o encaixe, e separar interfaces.Pimpl é curto para “ponteiro para a implementação.” Você pode já estar familiarizado com o conceito mas saber por outros nomes como o idioma do firewall de gato ou do compilador de Cheshire.

Por que usar o pimpl?

Aqui é como o idioma de pimpl pode melhorar o ciclo de vida de programação de software:

  • Minimização de dependências de compilação.

  • Separação de interface e de implementação.

  • Portabilidade.

Cabeçalho 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
};

A linguagem de pimpl evita cascatas da recompilação e layouts frágeis do objeto.É bem adequado para tipos populares transitiva ().

Implementação de Pimpl

Defina a classe de impl no arquivo de .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 ... 
}

Práticas recomendadas

Considere se adicionar suporte para a especialização de lançamento de troca.

Consulte também

Outros recursos

Guia de programação C++ moderno

Referência de linguagem C++

Referência da biblioteca C++ padrão