パターンとローカル実装の比較の話とか2009/11/07こちらの話を読んでいて。コードが長いので,詳細はリンク先を参照してください。-OKWaveここで質問です。パターンを使うことと,純粋仮想関数を宣言した基底クラスだけを晒して,仮想関数を実装した派生クラスを翻訳単位から隠すことは,どう違うんだという話(まとまってるか?)。サンプルのコードはトップレベルに生成関数があるけれど,これは基底クラスの中に入れちゃえばいい話なので(下記参照),あまり問題ではありません。パターンとのメリットを比較する以前の問題として,こういう継承関係を作ることがそもそも,あまりよろしくないんじゃないだろうか。VirtualDeri;}こうなってるわけだけれども,基底クラスが派生クラスの存在を予定している(派生クラスに依存している)ことになってしまってます。主従の関係が保ててない。基底クラスは実装済みの派生クラスを知ってちゃいけない建前からすると,ちと奇妙な実装です。まとめる際にヘッダからメンバ変数を隠蔽したいってなことですから,実害がなけりゃ抜け穴的な使い方として使ってもいいじゃね?ともなりそうですよね(あたしは嫌だけれども),これ,どんなときに困るんだろう。クラスを拡張して別の派生クラスを作るとします。クラスを派生させたクラスが作れません。インターフェイスを継承した新しいクラスしか定義できなくなってしまう,と。存在を意識する必要はない)。引用の回答にもある通り,実装を交換できるかという点でも違いはあるんだと思います。パターンを利用すればいいし,これなら実装を翻訳単位から隠すこともできます。機構を使うメリットはなさげです。ここで,継承関係を正常に保ちつつ,しかも生成する派生クラスの名前を隠蔽したまま,目的のオブジェクトを作る,という話になると,いきなり問題が難しくなります。こゆとこまでくると,実装の隠蔽云々というよりは,汎用プログラミングのドロドロ世界に突入してしまうんでしょうけど。pimpl」を試してみるのもいいのかもしれない。使い道ってあたしもまだモヤモヤなんですけどね。