「pimpl」のすゝめ
@SubaruG センセが pimpl についてわかりやすくつぶやいていたのでまとめました。C++ ならでは(?)の解説ですね。
ドクターねるねるねるね
@DrNerunerunerun
pimplイディオムは便利だけどさ、個人的にはインターフェース+ファクトリ関数でいいよねって思う。pimplと継承の相性悪すぎるんだもん
2010-08-18 18:28:05
ドクターねるねるねるね
@DrNerunerunerun
ファクトリなら機能追加を見越してバージョン番号を渡すように引き数作っとけばいいし。pimplの方が優れている部分が正直思い浮かばないんだけど何かあるんですか教えてえりゅい人!
2010-08-18 18:31:29
普通のC++使い、銀天すばる
@SubaruG
pimpl の強みは int と同じように振舞うクラスを書ける点であって、継承を使うなら pimpl に意味はない。
2010-08-18 18:45:50
ドクターねるねるねるね
@DrNerunerunerun
@SubaruG 継承に弱いのをデメリットとして見るか、継承させたくないときに使えるとメリットとして見るか…とか考えてます。
2010-08-18 18:46:55
普通のC++使い、銀天すばる
@SubaruG
@yreeen 継承に弱いと言っても別に弱くないですよ。要は普通の非 virtual なデストラクタを持ったクラスと同じですから。
2010-08-18 18:48:34
普通のC++使い、銀天すばる
@SubaruG
pimpl で作られたクラスは、どのように使ってもいい。 abstract class と継承を使った実装秘匿は、ポインタ経由でしか使えない。この違いは、かなり大きい。
2010-08-18 18:53:58
普通のC++使い、銀天すばる
@SubaruG
一番典型的なのはコピーですにゃ。 pimpl なら、しっかりコピーコンストラクタを定義すれば、 C++ の意味論に従ってきちんと動作してくれる。
2010-08-18 18:55:26
普通のC++使い、銀天すばる
@SubaruG
pimpl ってのは中身を完璧に隠蔽するのです。その分だけ効率は落ちます。使い道を少し限定して多態による隠蔽を行えば、効率は上がるのは当然。
2010-08-18 18:58:47
普通のC++使い、銀天すばる
@SubaruG
普通にC++書いてて、継承による多態を使わなきゃいけない部分って、どんだけある? っていう話でして。 スタック上やコンテナ上に直接置くんじゃダメなの? 的な。
2010-08-18 19:09:23
ドクターねるねるねるね
@DrNerunerunerun
@SubaruG 複数の中身が異なるデバイスを外部から同じように扱いたいとき がやたら多い私です・・・
2010-08-18 19:12:49