これはおそらくテンプレート化されたどのクラスにも一般化することができますが、私はこれをshared_ptrで実行しました。 は、私は次のようになり、クラスのシステムがあります。私のライブラリで、私はユーザーに公開すべきでない関数のセットを使用していますので、私はこの概念を使用してい特殊なshared_ptr変換C++ 0x
class A {
protected:
// some data
}
class B : public A {
// some access functions
}
class C : public A {
// some other access functions
}
を、ので、私は2つのインターフェイスに、これらの機能を分割しますクラス。今、私は1つのクラスと友人を使うことができると知っていますが、複数のクラスがそれらの関数にアクセスする必要がある場合、これは醜いでしょう。
しかし、私はこれらのクラスがshared_ptr
でarroundに渡され、参照カウントを保持する必要があります(データが破壊されるため)。したがって、この例ではshared_ptr<B>
からshared_ptr<C>
に変換する必要があり、その逆もあります。 shared_ptr
は、必要な場合にはそのようなことを許しますか?もしあれば、それは何ですか?コンストラクタ?オペレータを割り当てますか?または、レベルを上げてコンテンツだけでなくポインター全体をキャストする必要がありますか?私は今まで運がなかった。
また、特定の機能を隠すための優れた方法があれば喜んで聞こえますが、この質問にも回答したいと思います。
は、匿名の名前空間を見たことがありますか?内部リンケージ? – ildjarn
私は内部のリンケージを使用してコンテンツのほとんどを隠していますが、B(ライブラリの内部関数をパックしています)を含む第4クラスDを想像してください。他のクラスのヘッダに既に必要な場合は隠すことはできません。私は名前空間のない経験がほとんどないので、おそらくそれについて詳しく見ていきます。 – Raven
私は、この継承のナンセンスの代わりに_を意味しました。 – ildjarn