私は複数の基本クラスから派生したクラスを持っています。問題は、派生クラスと基本クラスはデフォルトのコンストラクタを使用せず、引数を取るので、私はどのように管理できるのか混乱しています。私はコンストラクタであったはずのものに引数を渡すことができるようにしたいですが、私は一度行うことができます(私はそれがセッターになりたくない)。私の唯一の解決策は、派生クラスのgetInstance()メンバーの静的なブール値でした。デフォルト以外のコンストラクタの複数のベースを持つシングルトン派生クラス
基本ケース:それはシングルトンのようにする
//Singleton Derived Class with multiple bases of non-default constructors
class base1 {
public:
base1(int* value) :
val_{value} {;}
~base1();
private:
int val_;
}
class base2 {
public:
base2(int* value) :
val_{value} {;}
~base2();
private:
int val_;
}
class derived : public base1, public base2 {
public:
derived(int* value) :
base1{value}, //Base 1 constructor call
base2{value}, //Base 2 constructor call
val_{value} {;}
~derived();
private:
int val_;
}
//Creation
derived newDerived(&value);
試み?
//Lets make it a singleton
class base1 {
public:
base1(); //Can I pass the construtor anything?
~base1();
private:
int val_;
}
class base2 {
public:
base2(); //Can I pass the construtor anything?
~base2();
private:
int val_;
}
class derived : public base1, public base2 {
public:
static derived& getInstance(int* value) {
static bool init;
if (!init) {
base1::val_ = value;
base2::val_ = value;
init=true;
}
static derived instance;
return instance;
}
derived(int* value) {;}
~derived();
private:
derived(derived const&) = delete; //Copy construct
derived(derived&&) = delete; //Move construct
derived& operator=(derived const&) = delete;//Copy assign
derived& operator=(derived &&) = delete; //Move assign
int val_;
}
//Creation
derived::getInstance(&value);
私はこのことについて行かなければならない、または多分理由は私がすべてでそれを行うべきではありませんどのようにいくつかの方向を探していますか?ありがとう
このシングルトンのコンストラクタに渡します。それを静的ローカル変数として格納するのは良い考えではありません。デフォルトのコンストラクタを使用してインスタンスを作成するだけでなく、インスタンスの存続期間を制御することもできます。 – VTT
Mayne私は思考を超えています。これが遅延初期化を使用する場合、私は 'int * value'を派生したコンストラクタに渡して、そのまま残しておくことができます。 – DrTarr
なぜシングルトンが必要ですか? – Jarod42