次のコードスニペットでは、Color
列挙型Car
のスコープを制限し、グローバル名前空間を「汚染」しないようにするために、列挙型がクラス内で宣言されています。
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
グローバル名前空間で別の列挙型が宣言されている場合に備えて、前者のほうが良いと思います。少なくとも、参照している列挙型については明示的です。)
Car::Color getColor()
しかし、void Car::setColor(Color c)
中にいるのでsetColor
、私たちは、すでに指定子を持っています。