假设有一个深夜我感到相当无聊,凝视着电脑屏幕几个小时之后,我决定实现一个C++聚合类来管理绘制像素的颜色,因为我显然已经疯了。首先,我们将告诉(可能是单例的)ColorManager
对象我们想要使用哪种颜色,它将返回一个Color
对象,不管那是什么。
一个简单的实现:
#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);
这应该让我们很容易地做任何需要使用Color
对象的无聊操作。
问题是,您需要在某个地方初始化静态私有ColorMap
,以便每个COLOR
枚举对应一个正确的Color
对象,而VC++ 2010似乎不喜欢您尝试的任何内容。所以问题是,我该如何在哪里初始化此映射?
显然,这是一个编造的例子,但除此之外,也许为作为单例函数的类定义静态变量不值得麻烦。或者,也许我可以将变量声明为getColor()
内的静态变量,因为那是唯一使用它的函数,并且只会在第一次调用函数时产生开销(虽然对于这个简单的示例来说,这并没有比在其中放置一个巨大的switch语句要好多少)。
无论如何,我感谢您的反馈。