実装にだけ必要な型を隠すには...
どうやるのが定番なんだろうか?
class A { public: int method1(int arg); int method2(int arg); private: B member1; C member2; };
A を利用する人は、B や C を知らなくてもいい。でも、A の method1, method2 の実装には B, C といった型が必要で、それはメンバで保持している。でも、A の利用者に B や C を公開したくない。
- 案1
- A の公開したい要素をインターフェスとして抽象クラスで公開してそっちをみせる。A はそれのコンクリートな実装。
- 案2
- A の private には void *privdata など1つだけ置いておき、private なメンバは this->member1, this->member2 ではなくて、privdata->member1, privdata->member2 でアクセスする。(マクロを使えば void* から具体的なメンバをもった型への変換はきにならないだろう)
案1は、A の利用者が普通に A 型の変数を作成したり new A() するときに不便そうなので、案2かな…。
まあ、別に B や C を絶対に公開したくないってのことでもなくて、B が定義されてるヘッダが超巨大なので A の利用者の include list に入れないで解決できるといいな、って程度なのですが。