Re: Саморегистрация классов в фабрике
От: WoldemaR Россия  
Дата: 30.03.06 06:02
Оценка:
Здравствуйте, remark, Вы писали:

Короче прикол такой.
Есть у меня подобная фабрика в одном многомодульном проекте.
в модуле 1 сидит фабрика и базовые интерфейсы моих сервисных класссов.
в модуле 2 сидят реализации моих сервисных класссов. наружу торчат только задефайненые индексы. То есть у либы весь интерфейс выглядит примерно так:
#define MY_ACTION_MOVE    1
#define MY_ACTION_COPY    2
#define MY_ACTION_PASTE   3
...

И так далее...
Это что из подключаемого ашника торчит.
Сами классы регистрились в статических глобальных переменных сипипишника.

Ясно дело, что в третий модуль они нифига не грузились
пришлось заюзать вызов формальной функции-болвана.

Вот такой прикол.
Re[2]: Саморегистрация классов в фабрике
От: rg45 СССР  
Дата: 30.03.06 06:33
Оценка:
"WoldemaR" <15414@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1812783@news.rsdn.ru...
> Здравствуйте, remark, Вы писали:
>
> Короче прикол такой.
> Есть у меня подобная фабрика в одном многомодульном проекте.
> в модуле 1 сидит фабрика и базовые интерфейсы моих сервисных класссов.
> в модуле 2 сидят реализации моих сервисных класссов. наружу торчат только задефайненые индексы. То есть у либы весь интерфейс выглядит примерно так:
>
> #define MY_ACTION_MOVE    1
> #define MY_ACTION_COPY    2
> #define MY_ACTION_PASTE   3
> ...
>

> И так далее...
> Это что из подключаемого ашника торчит.
> Сами классы регистрились в статических глобальных переменных сипипишника.
>
> Ясно дело, что в третий модуль они нифига не грузились
> пришлось заюзать вызов формальной функции-болвана.
>
> Вот такой прикол.

Знаем, наступали.
Чтоб ничего не вызывать, можно применить такой прием: в ашнике объявляется класс в котором объявляется только конструктор по умолчанию. Тут же в ашнике объявляется нестатическая константа этого типа. Определение конструктора этого класса дается в cpp-шнике, в котором определены фабрики. Тогда стоит только включить заголовок в каком либо модуле другого проекта и линковка фабрик обеспечена.
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Саморегистрация классов в фабрике
От: WoldemaR Россия  
Дата: 30.03.06 10:24
Оценка:
Здравствуйте, rg45, Вы писали:

R>Знаем, наступали.

R>Чтоб ничего не вызывать, можно применить такой прием: в ашнике объявляется класс в котором объявляется только конструктор по умолчанию. Тут же в ашнике объявляется нестатическая константа этого типа. Определение конструктора этого класса дается в cpp-шнике, в котором определены фабрики. Тогда стоит только включить заголовок в каком либо модуле другого проекта и линковка фабрик обеспечена.

Клёва. хотя и напоминает танец с бубном.
Re[2]: Саморегистрация классов в фабрике
От: Oval  
Дата: 02.04.06 09:53
Оценка:
Здравствуйте, Oval, Вы писали:

O>Но в целом — супер!

O>Выбросил Locki-фабрику нафик.
+ Когда избавился от Locki-фабрики пропала излишняя зависимость файлов проекта.
Мне кажется это надо запостить в comp.lang.c++
Re[3]: Саморегистрация классов в фабрике
От: remark Россия http://www.1024cores.net/
Дата: 02.04.06 10:02
Оценка:
Здравствуйте, Oval, Вы писали:

O>Здравствуйте, Oval, Вы писали:


O>>Но в целом — супер!

O>>Выбросил Locki-фабрику нафик.
O>+ Когда избавился от Locki-фабрики пропала излишняя зависимость файлов проекта.
O>Мне кажется это надо запостить в comp.lang.c++


Там на английском надо?
Если на английском, то если кому не лень может запостить... ну с небольшой ссылочкой на автора



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: Саморегистрация классов в фабрике
От: remark Россия http://www.1024cores.net/
Дата: 02.04.06 10:09
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Oval, Вы писали:


O>>Здравствуйте, Oval, Вы писали:


O>>>Но в целом — супер!

O>>>Выбросил Locki-фабрику нафик.
O>>+ Когда избавился от Locki-фабрики пропала излишняя зависимость файлов проекта.
O>>Мне кажется это надо запостить в comp.lang.c++


R>Там на английском надо?

R>Если на английском, то если кому не лень может запостить... ну с небольшой ссылочкой на автора

Если выдавать эту фабрику как замену Loki::Factory, то надо доделать то, чего у меня ещё нет — параметры для конструктора. У меня в примере без параметров, а надо сделать:

create();
create(T1 p1);
create(T1 p1, T2 p2);
...



Проблему форвардинга параметров можно "решить" с помощью boost:(c)ref



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.