0

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 回答 2

2
  • 如果您enum唯一相关的MySingletonClass是在类中声明它是好的。那么你必须MySingletonClass::eCodeZero在类定义之外定义的函数中使用。
  • 如果您enum在其他一些类中同样使用,那么最好的方法是在类之外但使用命名空间声明它。
于 2013-03-12T04:53:31.503 回答
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,这意味着更好的枚举名称范围。参见示例: 强类型枚举

于 2013-03-12T05:23:37.597 回答