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

时间:2013-03-12 04:22:06

标签: c++

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; //不正确的语法]
  4. 感谢您的时间。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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,这意味着更好地确定枚举名称的范围。参见例如: Strongly typed enumerations