Сокращенная проблема (Y)
Предположим, вам нужно знать, изнутри функции, была ли эта функция вызвана как часть инициализации статического объекта или нет. Существует ли стандартный или платформенный способ для этого?
История предыстории (X)
Я вкопался в исходный код DLL, который используется многими приложениями. Эта DLL предоставляет функцию Init
, и эта функция должна построить boost::asio::deadline_timer
, которая будет использоваться позже (но DLL может работать без нее в деградированном режиме).
Проблема заключается в том, что таймер не может быть создан во время инициализации статических объектов (время загрузки DLL), для того, чтобы его тупик конструктора.
Конечно, каждый и их кошка называет Init
всюду (да, несколько раз!), включая статические конструкторы из исходного кода, которые я не буду редактировать, следовательно, необходимо обнаружить эту ситуацию и выручить.
После того, как прагматизм преодолел отвращение, я в итоге поднялся по стоп-косту, чтобы найти wWinMain
и вывести, что статическая инициализация завершена. Это ужасно и не работает с динамически загруженными двоичными файлами, что, к счастью, выходит за рамки моего конкретного случая. Я уверен, что есть более чистый способ.