簡體   English   中英

在可以創建彼此實例的不同類之間共享靜態數據成員

[英]Sharing static data members between different classes that can create instances of eachother

我編寫了一個類(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 私有實例的指針。 我覺得這會使代碼混亂很多。

謝謝

另外,我還有其他需要訪問這些靜態成員的類(DataSample 和 DoABCD)

只需像您所做的那樣將這些靜態成員聲明為 public,然后在任何其他代碼中引用它們(包括 DataSample 或 DoABCD 中的代碼:

class DataSample {
  ...
  int GetFragle(void) {
    return AbcdBase::PlotHelperInst->m_fragle;
  }
  ...
};

無需做任何事情。

它們已經公開,您可以從任何地方使用 AbcdBase::PlotHelperInst。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM