pimplイディオムについて調査した件
Usushiki
pimpl
C++で使われるイディオム(アルゴリズム)
というわけで、
もう知っている方は、
Pimplイディオム
Pimplは、”ピーインプル” と呼ばれることが多い。
意味としては、 Pointer To Implementation(実装へのポインタ)
Private Implementation(実装の隠蔽)
どちらかといえば、上の意味で受け取られることが多い。
しかしてその実態は、下のほうらしい・・・。
(↑ゲームプログラマのためのC++より)
どんなことができるの?
その1 クラスのインターフェース部分と実装部分を分離できる
その2 不要なヘッダファイルのインクルードを減らせる
その4 コンパイル時間を減らせる(抑制できる)
その3 その1により、再コンパイルする必要がなくなる
こんな時使える
・ヘッダファイルの中にメンバ変数がごちゃごちゃしているとき
・publicとprivateのメンバ(変数、関数)を分離させたいとき
・↑が原因でコンパイルの時間が長くなってきたとき
実装
今回は以前作ったWindowクラスに適応してみる。
pImplイディオム適応 + リファクタリング 後
初期化関数とメンバ変数をpImplクラス内に隠蔽
ヘッダ内にインターフェースとイディオムのみに
なった
Window.hpp
実装部分
Window.cpp
pImplクラスはcppで実装する。
実装部分(イディオムの生成)
pImplクラスオブジェクトはWindowクラスのコンストラクタで生成する。
Window.cpp
イディオム内のメンバへのアクセス
Window.cpp HandleMessage関数
m_pImpl->(メンバ)の形でアクセスする
まとめ
メリット
・クラスのインターフェース部分と実装部分を分離できる
・不要なヘッダのインクルードをなくせる
・コンパイル時間の短縮(抑制)
デメリット
・間接参照のオーバーヘッドが発生する
ご清聴ありがとうございました

Pimplイディオムについて調査した件