【c++】激震が走った、Pimplイディオム

LINEで送る
Pocket

今日C++のためのAPIデザイン を読んでいて、激震が走りました。


C++では嫌でもprivateな変数や関数も.hファイルに宣言する必要がある。



そう思っていた時期が僕にもありました。

でも、違うんです。

どうやらPimplと言うイディオムを使うとcppファイルに隠蔽出来るそうです。

Pimpl導入前のコード


簡単な例で示してみましょう。
ここにHogeと言うクラスがあり、インスタンス化されたらhogeと出力されるクラスがあります。


Pimpl導入後のコード




解説


導入後のコードを見て下さい。
ハイライトしてるところが主な変更点です。

ヘッダファイル


まず、privateでclass宣言します。
名前はなんでも良いと思います。
Hogeクラスでprivateに行いたい動作を記述するクラス名となります。
ヘッダファイルではこのクラスのインスタンスを宣言するところまでを記述。

実装ファイル


16-20行目
– 新しいクラスのインターフェースを宣言します。
publicにしないとHogeクラス内からでも使えないので注意。

23行目
– 新しいクラスをコンストラクタでインスタンス化します。

25行目
– 新しいクラスのインスタンスを通じてメソッドを呼び出します。

27行目
– もともとHogeクラスでprivateで行いたかった実装をここに書きます。

あとがき


これはかなりの衝撃でしたね。
僕はObjective-CからC++に来ました。
Objective-Cではヘッダに書かずに.mファイルに直接実装すればprivateな関数になっていたのですが、C++ではヘッダファイルに宣言のみ書かなければいけないと言う制約。
でもこのPimplでそのストレスからも解放されそうです。

誰かのお役に立てば。
これは立つでしょう!!

このブログのcocos記事一覧

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です