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