1. ホーム
  2. c++

[解決済み] クラス内でのenumの宣言

2022-04-24 23:16:52

質問

次のコード・スニペットでは Color enum は Car クラスは、enum の範囲を限定し、グローバルな名前空間を汚染しないようにするためです。

class Car
{
public:

   enum Color
   {
      RED,
      BLUE,
      WHITE
   };

   void SetColor( Car::Color color )
   {
      _color = color;
   }

   Car::Color GetColor() const
   {
      return _color;
   }

private:

   Car::Color _color;

};

(1)これは、範囲を限定するために Color 列挙することができますか? それとも Car クラスではなく、独自の名前空間または構造体の中にある可能性は? 後者を提唱し、列挙に関するいくつかの良い点を論じているこの記事を、今日見つけた。 http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .

(2)この例では、作業時に として列挙するのが最善でしょうか? Car::Color それとも Color で十分です(前者の方が良いと思いますが、万が一、別の Color enum がグローバル名前空間で宣言されています。 そうすることで、少なくとも、参照している列挙型を明示することができます)。

解決方法は?

  1. もし Color は、単に Car の場合は、そのように範囲を限定することになります。もし、別の Color enumは、他のクラスが使用するため、グローバルにしたほうがよいでしょう(または、少なくとも Car ).

  2. 違いはありません。もしグローバルなものがあれば、ローカルなものの方が現在のスコープに近いので、いずれにしても使われます。もしこれらの関数をクラス定義の外部で定義する場合は、明示的に Car::Color を関数のインターフェイスに追加します。