私はいくつかの静的オブジェクトを保持するクラス(AbcdBase)を作成しました。これらはマップとヘルパー関数のプロットなどの "ヘルパーツール" 、テーブルを作成するための定数を格納するオブジェクトなどがあります。静的データメンバーを互いに異なるクラス間で共有することで、互いにインスタンスを作成することができます
私はこれらの静的メンバーにアクセスする必要のある他のクラス(DataSampleとDoABCD)を持っていますが、DoABCDはDataSampleのインスタンスをいくつか作成します。これをコーディングする正しい方法は何でしょうか? DataSampleとDoABCDの両方をAbcdBaseの派生クラスにすることは、正しい方法のようには見えません(私はそれを行うとSeg違反をします)。
class AbcdBase {
private:
int init();
int status;
public:
static SampleAggregator* SampleAggregatorInst;
static PlotHelper* PlotHelperInst;
static DataSampleConst* DataSetMap;
static DataSampleConst::SampleDict* ListOfSamples;
static std::vector<std::string> ListOfPlots;
static std::vector<std::string> ListOfRegions;
static Logger* LoggerInst;
AbcdBase();
virtual ~AbcdBase();
typedef enum {
A = 1, B = 2, C = 3, D = 4
} RegionEnum;
typedef enum {
MET = 1, ETCONE20 = 2
} DimensionEnum;
ClassDef(AbcdBase, 1)
};
シングルトンはこの問題を解決する正しい方法ですか? DataSampleまたはDoABCDがAbcdBaseのメンバーにアクセスする必要があるときはいつでも、instance()関数が呼び出され、AbcdBaseのプライベートインスタンスへのポインタを返します。私はこれがコードをたくさん混乱させるように感じる。
おかげ
'ClassDef(AbcdBase、1)とは何ですか? –
シングルトンは決して適切なソリューションではありません。 – spraff
これは、ROOT(科学的データ分析フレームワーク、そのクラス定義が本質的にROOTによって必要とされている....)内で使用される一連のクラスです。私がまだ理解していない理由からです。 –