Я возился вокруг с возможным способом, чтобы запустить некоторые куски «этот материал должен быть инициализирован при запуске программы» коде, сохраняя при этом их локальными для соответствующих модулей, и пришел с этим:Статические инициализаторы
static struct init {
init() {
// do stuff
}
} _;
Когда я положил это в модуль a.cc
, он работал нормально. Когда я положил его и в модуль b.cc
не очень хорошо - версия А была вызвана дважды, а версия B - совсем не так. Я понял, что ошибка компилятора, он запутывается в двух функциях с тем же именем, но меня удивило то, что при дальнейшем тестировании он ведет себя точно так же в Microsoft C++ и GCC. У обоих компиляторов случается, что у них такая же ошибка, или есть что-то, что мне не хватает в семантике языка?
Кроме того, любые рекомендации по обходным решениям или другим способам достижения одного и того же результата (помимо экспорта соответствующих функций и явного называния их из main
, что, очевидно, является резервным)?
связанный: http://stackoverflow.com/q/7437137/430766 – bitmask