[英]Accessing to enum values by '::' in C++
我有 class 如下所示:
class Car
{
public:
Car();
// Some functions and members and <b>enums</b>
enum Color
{
Red,
Blue,
Black
};
Color getColor();
void setColor(Color);
private:
Color myColor;
}
我想要:
Color
值作為Color::Red
。 當使用Car::Red
時,當 class 有很多枚舉、子類等時,真的很難理解代碼。Color
作為 function 參數或返回值switch
中使用變量類型Color
我知道 3 個部分解決方案:
Color
和枚舉Color
和枚舉enum class
1 和 2 解決方案解決了Color::Red
加入問題,但我不能使用像Color getColor()
和void setColor(Color)
這樣的函數。
3 解決方案有一個問題:VS2010 不支持enum class
。 GCC v.4.1.2 也不支持。 不知道gcc以后的版本。
是的,我正在從事跨平台項目。
我找到了這個解決方案,但它似乎......很重。
我希望有人能在這里幫助我:)
在當前的 C++(即 C++11 及以后)中,您已經可以像這樣訪問枚舉值:
enum Color { Red };
Color c = Color::Red;
Color d = Red;
您可以進一步 go 並強制使用此表示法:
enum class Color { Red };
Color c = Color::Red;
// Color d = Red; <-- error now
在旁注中,您現在定義了基礎類型,這在以前只能使用駭人聽聞的代碼( FORCEDWORD
或其他任何人?):
enum class Color : char { Red };
在嵌套的 class 中命名枚舉(例如一個):
class Car
{
public:
struct Color
{
enum Type
{
Red,
Blue,
Black
};
};
Color::Type getColor();
void setColor(Color::Type);
};
當我想做這樣的事情時,我傾向於在命名空間之外使用一個命名空間和一個 typedef(盡管我通常是在全局而不是在一個類中這樣做)。 像這樣:
namespace colors
{
enum Color
{
Red,
Blue
...
}
}
typedef colors::Color Color;
通過這種方式,您可以使用命名空間獲取實際的 colors,但Color
類型本身仍然可以全局訪問:
Color myFav = colors::Red;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.