我编写了一个类(AbcdBase),它包含几个静态对象,包括地图和一些静态对象,它们充当“辅助工具”,如绘制辅助函数,存储用于制作表的常量的对象等。 / p>
另外我还有其他需要访问这些静态成员的类(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私有实例的指针。我觉得这会使代码混乱很多。
由于
答案 0 :(得分:1)
另外我还有其他需要访问这些静态成员的类(DataSample和DoABCD)
仅仅声明那些静态成员public,就像你所做的那样,然后在任何其他代码中引用它们(包括DataSample或DoABCD中的代码:
class DataSample {
...
int GetFragle(void) {
return AbcdBase::PlotHelperInst->m_fragle;
}
...
};
答案 1 :(得分:0)
无需做任何事情。
它们已经公开,您可以在任何地方使用AbcdBase :: PlotHelperInst。
顺便说一下,你把它们用作全局变量。你可能有勇气承认它。将他们赶出课堂。