Конечно, вы помещаете это в один из ваших заголовочных файлов, скажем preinit.h:
class Init { public: Init() { initialize(); } }; Init init;
, а затем в одной ваших единиц компиляции введите:
void initialize(void) {
// weave your magic here.
}
#include "preinit.h"
Я знаю, что это клочок, но я не знаю любого переносимого способа выполнить предварительную инициализацию без использования конструктора класса, выполняемого в области видимости файла.
Вы также должны быть осторожны с включением более одной из этих функций инициализации, поскольку я не верю, что C ++ определяет порядок - он может быть случайным.
Я не уверен в этом «наброске», о котором вы говорите, но можно ли преобразовать основной модуль компиляции с помощью скрипта перед его передачей компилятору, что-то вроде:
awk '{print;if (substr($0,0,11) == "int main (") {print "initialize();"};}'
Вы можете видеть, как это повлияет на вашу программу, потому что:
echo '#include <stdio.h>
int main (void) {
int x = 1;
return 0;
}' | awk '{
print;
if (substr($0,0,11) == "int main (") {
print " initialize();"
}
}'
генерирует следующее с добавленным вызовом initialize()
:
#include <stdio.h>
int main (void) {
initialize();
int x = 1;
return 0;
}
Может случиться так, что вы не сможете пост-обработать сгенерированный файл, и в этом случае вам следует игнорировать этот последний вариант, но это то, что я бы посмотрел сначала.