【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();参考書籍
リンク