讓我們說,我很無聊一個晚上,在經過幾秒鐘的盯着計算機監視器後,我決定實現一個聚合C++類來管理繪製像素的顏色,因爲我顯然已經瘋了。對於初學者來說,我們只需告訴(可能是singleton)ColorManager對象我們想要使用什麼顏色,並且它會返回一個Color對象,不管它是什麼。一個簡單的FPGA實現如下:C++初始化一個靜態地圖作爲一個私人類成員
#include "Color.h"
#include <map>
enum COLOR { RED = 0, BLUE, GREEN, YELLOW, ORANGE, WHITE, BLACK,
BRICKS_FROM_A_DISTANCE_ON_AN_UNUSUALLY_SUNNY_AFTERNOON,
// etc
COLOR_COUNT };
class ColorManager
{
public:
ColorManager();
~ColorManager();
Color getColor(COLOR color) const;
private:
typedef std::map<COLOR, Color> ColorMap;
static ColorMap colorMap;
};
所以,我希望,這個簡單的代碼:
ColorManger colorManager;
Color blue = colorManager.getColor(BLUE);
應該使它真正方便我們做任何廢話,你會需要顏色的對象。
問題是,您需要初始化您的靜態私有ColorMap,以便每個COLOR枚舉對應一個適當的Color對象,並且VC++ 2010似乎不喜歡您嘗試的任何內容。所以問題是,我如何以及在哪裏初始化這張地圖?
顯然,這是一個人爲的例子,但除此之外,也許爲一個類作爲單例函數定義靜態變量是不值得的。或者,也許我只需在getColor()中聲明變量static,因爲這是唯一使用它的函數,並且在第一次調用函數時會產生開銷(儘管對於這個簡單的例子來說,而不僅僅是在那裏放置一個巨大的開關語句)。無論如何,我欣賞這些反饋。
在VS2010,這將導致運行時內存訪問衝突中的XTree,想必當值類的構造函數分配。它雖然編譯。 – Shaun 2011-06-02 19:57:09
@SHaun顯然你在構造函數中做錯了什麼......當心不要依賴於其他靜態變量。 – littleadv 2013-11-15 08:15:31