我写了一个类 (AbcdBase),它包含几个静态对象,其中包括 map 和一些充当“辅助工具”的静态对象,例如绘图辅助函数、存储用于制作表格的常量的对象等。
另外,我还有其他类(DataSample 和 DoABCD)需要访问这些静态成员,不同之处在于 DoABCD 创建了多个 DataSample 实例。编码这个的正确方法是什么?让 DataSample 和 DoABCD 都成为 AbcdBase 的派生类似乎不是正确的方法(当我这样做时我会遇到段违规)。
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 的私有(private)实例的指针。我觉得这会使代码困惑很多。
谢谢
最佳答案
Separately I have other classes (DataSample and DoABCD) that need access to those static members
只需将这些静态成员声明为 public,就像您所做的那样,然后在任何其他代码中引用它们(包括 DataSample 或 DoABCD 中的代码:
class DataSample {
...
int GetFragle(void) {
return AbcdBase::PlotHelperInst->m_fragle;
}
...
};
关于c++ - 在可以创建彼此实例的不同类之间共享静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019260/