0

クラスがあります。それを Product と呼びましょう。その実装は、ユーザーから完全に隠したいと思います。とはいえ、ユーザーには何が入っているか分からないまま、商品を集めて回し、どうするかを決めるのが一般的です。

最初に頭に浮かんだアイデアは、単純に ProductFactory クラスを作成し、ProductFactory.h ヘッダーで Product クラスを前方宣言するというものでした。
Product クラスのオブジェクトは、Product クラスへの共有ポインタを返す makeProduct メソッドによって作成されます。ユーザーは中身を見ることはできませんが、たとえば Service クラスに送信することができます。このクラスの実装には、Product の完全な定義が含まれているため、内部にアクセスできます。
それは良い考えだと思いますか、それともむしろ回避策のように感じますか?

また、ユーザーがアクセスできるトップレベルの機能が必要な場合に備えて、pimpl イディオムを使用することも考えていました。

抽象基本クラスはオプションではないことに注意してください。たとえば、ユーザーにとって十分に制限され、Service クラスにとって十分なインターフェイスは実際には存在しないためです。

4

1 に答える 1

2

shared_ptr が提供する操作がユーザーにとって十分である場合 (たとえば、operator== が必要である場合)、このソリューションを使用することをお勧めします。

これ以上必要な場合は、ユーザーが必要とする操作をクラス内で定義し、Service クラスが必要とする操作を impl 内で定義できるため、pimpl は良い方法のように思えます。ここでもスマート ポインターを使用して、生活を楽にすることができます。

于 2016-02-17T11:43:28.003 に答える