Я хочу написать некоторый код, который будет зависеть от значения статической переменной.Поэтому я хочу добавить некоторую проверку, чтобы исключить возможность вызова этого кода из других конструкторов статических переменных.И предотвратит статический порядок инициализации фиаско раз и навсегда.Например:
static Foo foo = Foo();
// this function should be called ONLY from main program conrol flow
// ONLY after all static variable initialization was complete! ONLY!
int bar()
{
#ifdef _DEBUG
if(! CRT_was_initialized_and_main_function_was_called ) ShowErrorMessage();
#endif
if(foo.somefunction() == 2) return 0; else return -1;
}
//here inattentive programmer will caught error message during debug
const int barConstant = bar();
int main()
{
//now all is fine
const int barConstant = bar();
}
Как я могу это сделать?Как проверить, была ли вызвана моя функция после того, как основная функция была?
UPDATE: у объекта Foo очень тяжелый код инициализации, он может быть медленным и даже выдать исключение
UPDATE2: нетжизненное беспокойство, чтобы сделать это.Функция комментариев до бара работала нормально большую часть времени.Я заинтересован в некоторой проверке отладки, чтобы наказать невнимательного программиста в отладочной версии программы вместо того, чтобы делать это вручную.И это может быть нестандартным способом, похожим на вызов какой-то сумасшедшей встроенной функции, которая будет работать только на MSVC.