Я провожу довольно любопытные эксперименты, используя функции pre-main, регистрирующие мои классы. на фабрике через анонимные пространства имен. До недавнего времени добавление следующего кода в определение класса (.cpp) помогало.
Код: Выделить всё
namespace { int x = Register(className); }
Это работало нормально, и каждый класс, включавший этот макрос, регистрировался, пока я не перенес код в статическую библиотеку. Теперь, поскольку на классы ссылается только фабрика, похоже, что они исключены из сборки - мои функции «Регистрация» больше не вызываются, и поэтому моя фабрика пуста.
Мне удалось это исправить, переместив все мои макросы в конструктор объекта-менеджера, но я заметил, что как только я ссылался на них там, макросы в файлах .cpp начали вызываться снова. Я догадался, потому что теперь на классы действительно что-то ссылается.
Однако на самом деле мне не хочется делать это таким образом, и я не могу найти ни к чему не обязывающий способ ссылки на классы в конструкторе (например, class ClassToRegister;), который включает их в сборку, чтобы вызывались мои макросы регистра.
Во-первых, делает ли это смысл?
Во-вторых, какой-нибудь совет о том, как я могу заставить эти TU компилироваться так, чтобы анонимные пространства имен «сработали» во время выполнения?
Подробнее здесь: https://stackoverflow.com/questions/889 ... ompilation
Мобильная версия