0

コードベースに次のようなライブラリがあります。

namespace rat {

   ...

   enum myEnum {
      BLUE,
      RED
   }

   ...
} //namespace rat

後で、以前にライブラリを使用してコードベースでアプリをコンパイルしようとしましたが、名前空間rat(コードベースのメイン名前空間)を使用すると、BLUEは、rat::myEnum rat::BLUEまたはrat::enums::Freq rat::enums::BLUE私がよく知らない他のファイルからのものである可能性があるというあいまいさを警告します(そして私のものではありません)名前空間ラット内の名前空間enumsにBLUEと呼ばれる男との列挙型Freqを持っています...

ユーザーコードに、現時点でどれが欲しいかを言う方法はありますか?または、mylibs列挙型を名前空間mylibにネストしてから、rat :: enums::BLUEまたはrat::mylib :: BLUEのいずれかを言う必要がありますか?

4

2 に答える 2

6

列挙型定数の完全な明確な名前は、、などになり::rat::BLUEます::rat::enums::BLUE

式の先頭にあるは、グローバル名前空間::を表すことに注意してください。

于 2012-07-11T19:30:24.453 に答える
4

私がC++03(C ++ 11より前!)で通常行うことは、enumsをstructsにネストすることです。これにより、sがリークしなくなります。

namespace rat {
  struct myEnum {
    enum Enum {
      blue, red
    };
  };
}

変数をとしてrat::myEnum::Enum、値をとして定義する必要がありますrat::myEnum::blueが、通常myEnumはのような意味のあるものにする必要があるColorため、名前は冗長ではありません。

これはある意味でC++11をエミュレートするclass enumため、C ++ 11コンパイラにアクセスできる場合は、これらを使用する必要があります。

于 2012-07-11T19:30:09.157 に答える