c++ - 在可以创建彼此实例的不同类之间共享静态数据成员

标签 c++ class

我写了一个类 (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/

相关文章:

java - 将父类(super class)转换为子类

c++ ->?= 运算符是什么意思?

c++ - 如何控制socket速率?

Python:TypeError:__init__() 正好需要 2 个参数(给定 1 个)

c# - 使用更多结构?

python - 如何使用反射或解析读取Python类中声明成员的顺序(禁止元类替换)?

c++ - 在预处理器指令中使用 openmp 时出错

c++ - 模拟游戏机的内存映射,根据提供的地址访问不同的位置

c++ - Visual Studio C++ 中的/MD 和/DMD 有什么区别?

C++ 类继承 : Functions