Если я закодирую этот
std::map<int, char> example = {
(1, 'a'),
(2, 'b'),
(3, 'c')
};
тогда g++ говорит мне
deducing from brace-enclosed initializer list requires #include <initializer_list>
in C++98 ‘example’ must be initialized by constructor, not by ‘{...}’
и это немного раздражает меня, потому что конструктор является временем выполнения и может теоретически терпеть неудачу.
Конечно, если это произойдет, он быстро сработает и должен делать это последовательно, так что я должен быстро найти и исправить проблему.
Но, тем не менее, мне любопытно - есть ли способ инициализировать карту, вектор и т.д. во время компиляции?
Изменить: я должен был сказать, что я разрабатываю для встроенных систем. Не все процессоры будут иметь компилятор С++ 0x. Самый популярный, вероятно, будет, но я не хочу встречаться с gotcha и должен поддерживать 2 версии кода.
Что касается Boost, я не знаю. Они желательны в использовании своих классов конечных машин в встроенных системах, поэтому на самом деле я кодирую здесь классы Event/State/Fsm.
Вздох, я думаю, мне лучше играть в это безопасно, но я надеюсь, что эта дискуссия была полезной для других.