コンパイル時のカプセル化の Pimpl (Modern C++)

pimpl idiom は、実装を非表示にし、結合を最小限に抑え、インターフェイスを分離する最新の C++ 手法です。 Pimpl は"実装へのポインター" の短い値です。この概念には既に慣れ親しんでいますが、Checheche Cat や Compiler Firewall の慣用句などの他の名前で知っている場合があります。

pimpl を使用する理由

pimpl イディオムを使用してソフトウェア開発ライフサイクルを改善する方法を次に示します。

  • コンパイルの依存関係の最小化。

  • インターフェイスと実装の分離。

  • 移植性。

Pimpl ヘッダー

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

pimpl の慣用句では、カスケードの再構築とオブジェクト レイアウトの brittle が回避されます。 (推移的に) 一般的な型に適しています。

Pimpl の実装

.cpp ファイルで impl クラスを定義します。

// 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 ...
}

ベスト プラクティス

スローしないスワップの特殊化のサポートを追加するかどうかを検討します。

関連項目

C++ へようこそ
C++ 言語リファレンス
C++ 標準ライブラリ