基本クラスの子にプライベートコンストラクタを強制したい。次に、これらのコンストラクタを、ファクトリクラスのフレンドクラスを介して呼び出す必要があります。基本クラスの子にプライベートコンストラクタを適用する方法
class Base:
virtual double method1();
は私がベースを継承しChild
をしたい:Base
の
class Child::Base :
public:
Child(string s) {
//do something
}
double method1() {
return field1;
}
private:
double field1;
}
子供がstring
を解析することによって作成されるだろう、私はクラスBaseを持って
:これは私の使用パターンです。だから私はを取るBase
のコンストラクタを持つことができます。しかし、私はコンストラクタを仮想にすることはできないので、パラメータを強制することはできません。
Base
の子は入力string
からしか作成できないように、Base
の子をファクトリクラスからインスタンス化します。私の問題は、誰かがChild
を別々にインスタンス化するのを妨げるものは何もないことです。したがって、子どものコンストラクタをBase
に限定してプライベートにしてから、ファクトリクラスをフレンドクラスにしたいと考えています。
アイデア?このデザインに関するコメントさえ歓迎します。
PS:文字列からChild
の文字列を取得するには、すべての子供に異なるでしょう。
私は、はっきりあなたの質問のルートを取得していませんか? –
が質問を変更しました。私は単純な例に質問を抽象化しようとしていたが、明らかに私は失敗した。 –
Base privateのデフォルトのコンストラクタにマークを付けることができます。したがって、子コンストラクタは、文字列をパラメータとして呼び出すことを強制されるか、「利用可能なデフォルトコンストラクタを使用できません(C2512)」というエラーが発生します。 –