Что является причиной включения TU в компиляцию?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Что является причиной включения TU в компиляцию?

Сообщение Anonymous »

Честно говоря, я немного не в теме.

Я провожу довольно любопытные эксперименты, используя функции pre-main, регистрирующие мои классы. на фабрике через анонимные пространства имен. До недавнего времени добавление следующего кода в определение класса (.cpp) помогало.

Код: Выделить всё

namespace { int x = Register(className); }
Это будет заключено в макрос, и «Регистрация» передаст тип и имя моей фабрике.

Это работало нормально, и каждый класс, включавший этот макрос, регистрировался, пока я не перенес код в статическую библиотеку. Теперь, поскольку на классы ссылается только фабрика, похоже, что они исключены из сборки - мои функции «Регистрация» больше не вызываются, и поэтому моя фабрика пуста.
Мне удалось это исправить, переместив все мои макросы в конструктор объекта-менеджера, но я заметил, что как только я ссылался на них там, макросы в файлах .cpp начали вызываться снова. Я догадался, потому что теперь на классы действительно что-то ссылается.

Однако на самом деле мне не хочется делать это таким образом, и я не могу найти ни к чему не обязывающий способ ссылки на классы в конструкторе (например, class ClassToRegister;), который включает их в сборку, чтобы вызывались мои макросы регистра.

Во-первых, делает ли это смысл?

Во-вторых, какой-нибудь совет о том, как я могу заставить эти TU компилироваться так, чтобы анонимные пространства имен «сработали» во время выполнения?

Подробнее здесь: https://stackoverflow.com/questions/889 ... ompilation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»