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. 別のクラスで enum 変数を宣言するための構文は何ですか? [次のようなことをする必要があります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、enum 名のスコープが改善されました。例を参照してください: 厳密に型指定された列挙

于 2013-03-12T05:23:37.597 に答える