Допустим, мне было довольно скучно поздно вечером, и после кататонического взгляда на монитор компьютера в течение нескольких часов я решил реализовать агрегатный класс 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, похоже, ничего вам не пытался. Итак, вопрос в том, как и где мне инициализировать эту карту?
Очевидно, что это надуманный пример, но помимо этого, возможно, определение статических переменных для класса, который функционирует как одиночный, не стоит проблем. Или, может быть, я мог бы просто объявить переменную static внутри getColor (), поскольку это единственная функция, которая ее использует, и просто понести издержки при первом вызове функции (хотя для этого простого примера это не намного лучше чем просто поместить гигантское заявление о переключении там). В любом случае, я ценю обратную связь.