Я немного не в себе, честно говоря.
Я провожу довольно любопытные эксперименты, заставляя pre-main функции регистрировать мои классы на фабрике через анонимные пространства имен.До недавнего времени добавление следующего к определению класса (.cpp) могло бы помочь.
namespace { int x = Register<classType>(className); }
Это будет обернуто в макрос, а 'Register' передаст тип и имя моей фабрике.
Это работало нормально, и каждый класс, который включал этот макрос, регистрировался, пока я не переместил код в статическую библиотеку.Теперь, так как на классы ссылаются только фабрики, похоже, что они исключаются из сборки - мои функции 'Register' больше не вызываются, и поэтому моя фабрика пуста.
Я справилсячтобы исправить это, переместив все мои макросы в конструктор объекта менеджера, но я заметил, что, как только я на них ссылался, макросы в файлах .cpp снова стали вызываться.Я догадался, потому что теперь на классы на самом деле ссылаются что-то.
Однако я действительно не хочу делать это таким образом, и я не могу найти необязательный способ ссылки на классы вконструктор (например, class ClassToRegister;
), который включает их в сборку, так что мои макросы регистров будут вызываться.
Во-первых, имеет ли это смысл?
Во-вторых, любые советы о том, как яможет заставить эти TU скомпилировать так, чтобы анонимные пространства имен «включались» во время выполнения?