コンパイル時のカプセル化の Pimpl (Modern C++)
pimpl の用法は 実装を非表示にし、結合を最小化し、インターフェイスを区切るに最新 C++ の方法です。Pimpl は "実装へのポインターには短い" です。既に概念について理解チェシャーの猫またはコンパイラのファイアウォールの"などの名前によってこれを知ることがあります。
理由 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 の用法はリビルドのカスケードと脆弱なオブジェクトのレイアウトを回避できます。これは (他動詞として) 好型の場合に適しています。
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 ...
}
ベスト プラクティス
非スロー スワップの特殊化のサポートを追加するかどうかを検討します。