C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
фабрики класов, библиотеки, и статическая инициализация
Георгий
Отправлено: 06.01.2005, 02:43


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



есть фабрика класов типа синглтон т.е. существующая в единственном экземпляре.
есть множество объектов с общим интерфейсом (общим базовым классом) регистрирующиеся в фабрике классов на этапе инициализации статических переменных:
CODE
const static reg=ClassFactory::GetInstance().Register(...);
каждый из классов находится в своём cpp файле.

соответственно при сборке происходит раздельная компиляция модулей (cpp файлов), редактор связей объединяет все объектники и устанавливает точку входа.
при запуске программы срабатывает функция инициализации статических переменных (её создаёт и встраивает компилятор) в каждом из модулей. и в результате в фаюрике классов зарегистрированы все объекты.

а теперь выношу эти объекты и фабрику классов в библиотеку.
линкую с главным файлом (тот, где функция main) и получаю облом — фабрика классов пустая.

методом тыка нашёл, что статическая инициализация у объектника взятого из библиотеки срабатывает только в том случае, если вызывается хоть одна не inline функция этого объектника.

а ведь задумка была так хороша — сваливаем все объекты и их фабрику в одну библиотеку, линкуем библиотеку с программами и эти программы автоматим (через ФК) получают возможность работать с объектами. добавляем новый объект в ФК, а все остальные программы надо только перекомпилировать.

как быть? отказаться от статической инициализации? превратить ФК в громадный switch? сделать функцию инициализации библиотеки (которая все объекты будет регистрировать в ФК)?

PS. ФК содрал из "современного проектирования на С++" именно в ней предлагалось использовать старическую инициализацию, но нигде ни слова небыло о вынесении объектов и ФК и библиотеку.

Вернуться в Вопросы программирования в C++Builder