2014-10-22 70 views
1

我的程序有一個枚舉來存儲colorsuser response像這樣。現在我需要保留RGBCYMK值以及顏色。因此,這不能做用枚舉,使用靜態向量作爲存儲

enum COLOR 
{ 
    RED = 'R', 
    GREEN = 'G', 
    BLUE = 'B', 
    YELLOW = 'Y', 
    MAGENTA = 'M' 
}; 

所以我刨使用結構的靜態數組用於這一目的。我使用靜態的,因爲

  1. 這些值永遠不會在節目
  2. 更改爲避免多次創建載體的時候其他類創建和銷燬該班反對。

    struct Color 
    { 
    char user_responce; 
    std::string rgb_code; 
    std::string cymk_code; 
    }; 
    
    static std::vector<Color> colors; 
    colors.push_back('R', "FF0000", "30 - 96 - 76 - 26"); 
    

    但是看完這篇文章後Is using a lot of static methods a bad thing?我對自己的行爲感覺不好。 這是一個「不安全」靜態?任何其他建議?

+2

這是什麼問題?你想要一個意見還是更好的解決方案? – Soren 2014-10-22 02:12:59

+0

我覺得這不是一個可靠的解決方案。所以尋找更好的解決方案 – 2014-10-22 02:14:13

+0

原因1不足以使用Static。 原因2:也許你需要一個單例模式 – Wajahat 2014-10-22 02:17:02

回答

2

如果值永遠不會再改變你可以這樣做:

static const std::vector<Colour> colors = 
{ { 'R', "FFFF00", "blabla" } 
, { 'S', "00FF00", "foo" } 
, { 'T', "0f3033", "burnt sienna" } 
}; 

個人而言,我會用一個C數組和指針在這裏燒焦;一般來說這些都是壞主意,但對於靜態變量來說,它消除了由於訪問尚未將其構造函數調用的對象而導致的未定義行爲的風險。