【发布时间】:2011-06-02 19:30:06
【问题描述】:
假设我在一个深夜很无聊,在紧张地盯着电脑显示器几个小时之后,我决定实现一个聚合 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() 中声明变量 static ,因为这是唯一使用它的函数,并且在第一次调用该函数时会产生开销(尽管对于这个简单的示例,这并没有好多少)不仅仅是在其中放置一个巨大的 switch 语句)。
无论如何,我感谢您的反馈。
【问题讨论】:
标签: c++ dictionary static stl