在单例类中声明和访问枚举- c++

Declaring and accessing an enum in a singleton class- C++

本文关键字:枚举 c++ 访问 单例类 声明      更新时间:2023-10-16

c++初学者问题!

如果在单例类的公共部分中有一个枚举,那么从单例类外部使用枚举值的正确方法是什么?

class MySingletonClass
{
    public:
      static MySingletonClass & Singleton();
      enum
      {
          eCodeZero         = 0,
          eCodeOne      = 1
      }MsgQueueCodes;
    protected:
          MySingletonClass ();
          ~MySingletonClass ();
};

我可以从类外像这样访问枚举值。

MySingletonClass::Singleton().eCodeZero
MySingletonClass::Singleton().eCodeOne

我的问题是,

  1. 这是正确的方法吗?
  2. 是否存在其他替代方法?
  3. 在另一个类中声明枚举变量的语法是什么?[需要做一些像MySingletonClass::MsgQueueCodes myMsgQCode;//不正确的语法]

感谢您的宝贵时间。

  • 如果你的enum只与MySingletonClass相关,那么在类中声明它是好的。那么你必须在类定义之外定义的函数中使用MySingletonClass::eCodeZero
  • 如果你同样的enum在其他类中使用,那么最好的方法是在类外声明它,但在命名空间内。

代码是有效的,并且可能是您想要的。注意,MsgQueueCodes被声明为(未命名的)enum的成员变量。也许你想:

class MySingletonClass
{
    public:
      static MySingletonClass & Singleton();
      enum MsgQueueCodes
      {
          eCodeZero     = 0,
          eCodeOne      = 1
      };
    MsgQueueCodes code;
    protected:
          MySingletonClass ();
          ~MySingletonClass ();
};

那么你可以写:

MySingletonClass::MsgQueueCodes code =  MySingletonClass::Singleton().eCodeZero;
MySingletonClass::MsgQueueCodes code =  MySingletonClass::Singleton().code;

另外,从c++ 11开始,我们有了enum class,这意味着枚举名称有了更好的作用域。例如:强类型枚举