Как создать такой ассоциативный массив, который будет содержать указатели на функции, чтобы я мог динамически создавать объекты из строки, без лапши вида if(str == "foo") {} ....
Не покажетесь, это, конечно, лучше.
Поясню тем, кто голосует за решение с указателем на функцию.
Выбрать boost::function это как выбрать std::string вместо char *.
Выбрать для хранения в std::map указателя на функцию это так же плохо, как хранить char * вместо std::string
То есть с boost::function можно будет в std::map хранить что угодно.
1) Так середина 2013 года на дворе. Пора использовать C++11 с кучей удобных фишек.
2) Но человек-то спрашивал про инициализацию времени компиляции. А сглобальными объектами надо быть аккуратным, чтобы не воспользоваться еще не инициализированным объектом.
А чем функция не фабрика? Это в Java фабрика обязательно класс т.к. там только классы и бывают. А в C++, если состояние не нужно, а нужно инкапсулировать логику создания объекта, то можно и функцию или статический метод сделать.