【C++】Pimpl
ヘッダファイルに記述されているクラスのprivateなメンバを隠蔽するイディオム。「pointer to implementation」の略称。
実装方法
まず、ヘッダファイルに書かれたクラス内で「privateなメンバを管理するクラス( ここではImplとする。 )」を前方宣言。そして、std::unique_ptrにImplを指定してprivateなメンバとして追加する。
#include <memory>
class Hoge 
{
public:
    Hoge();
    ~Hoge();
private:
    class Impl;
    std::unique_ptr<Impl> pImpl;
};続いて、Implをcppファイルで定義する。このクラスには、元のクラス( Hoge )で必要となるprivateなメンバをpublicで持たせる。
最後に、元のクラスのコンストラクタでImplを生成する。
#include "Hoge.h"
class Hoge::Impl
{
public:
    // Hogeで利用するprivateなメンバをここに記述
    void Output()
    {
        ::printf( "Hoge" );
    }
};
Hoge::Hoge() :
    pImpl( std::make_unique<Impl>() )
{
}
Hoge::~Hoge() 
{
}使い方
生成したImplのインスタンスを通してprivateなメンバを利用する。
this->pImpl->Output();参考書籍
リンク