[英]How can a compiler differentiate between static data members having same name in different classes in C++?
[英]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.