|
|
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
сомневаюсь. Опять же можешь посмотреть в прагмы или ещё куда. Но ведь приложение пишешь ты, в чём запарка? Если не найдёшь способа поместить кторы регеров в начало списка кторов, пиши подстраховку. Выдавай ошибку в случае статического создания. Или ещё что придумай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 13:23 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
1. Библиотеки пишу я. Приложения будут разные и те только я их буду писать. 2. А как выдать ошибку в случае статического создания (я это и хотел узнать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 13:42 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
типа так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 14:32 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
где надо, дописываешь "РУКАМИ НЕ ТРОГАТЬ!!!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 14:33 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Гениально! :) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 18:11 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Ой, как все закрутилось! Можно я прокомментирую? Действительно нет никакой гарантии, что статические объекты в вашем случае будут созданы в правильном порядке (наш любимый С ++ гарантирует порядок создания статических объектов только в пределах единицы компиляции). Задачку, однако, решить можно, но не просто, и без разделяемых библиотек никуда. Сам не пробовал, знаю откуда можно попробовать выдрать – это АСЕ. Есть там такой ServiceConfigurator. Идея довольно простая: делаем разделяемую библиотеку в которую складываем функции с С связыванием (описанные как extern C) каждая из которых создает объекты одного класса, который нужно создавать. Иначе сойдешь с ума с приавилами поименования своего компилятора. Делаем текстовый (xml) файл с описанием связывающий имя класса, имя разделяемой библиотеки и имя фукции. Пишем фабрику, которая в своем конструкторе читает файл описания и создает ассоциативный контейнер. Осталось только сделать из этого класса синглетон. Только такой, чтобы вовремя создавался и разрушался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 20:48 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Дорогой Akh! Спешу обрадовать, был не прав. Сделал как ты хотел. враги полтзователи библиотек даже static смогут юзать. см attachment ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 22:59 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Довел до конца. Теперь и в runtime можно добавлять элементы к фабрике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2006, 13:26 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedДовел до конца. Теперь и в runtime можно добавлять элементы к фабрике Не подойдет. Т.к., если мне будет необходимо подключить несколько модулей к программе, то у меня будет несколько конструкторов фабрики. Использовать один конструктор неполучится, т.к. в этом случае он будет находиться внутри основного модуля (который будет юзать нужные ему классы). Но он не знает о нужных ему классах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 13:09 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
ты это осилил? Герой. По-моему, это были чисто стихи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:12 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmoты это осилил? Герой. По-моему, это были чисто стихи. Нечего подначивать. На самом деле, подошло время реализовывать требуемую возможность (модули теперь готовы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:27 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmo Да, кстати, вариант с MainCalled не так уж и хорош. Ставить этот флаг при запуске мэна, не очень хороший стиль. Может С++ сам ставить какой-нибудь флаг? Сейчас вижу только один вариант - в основом уровне необходимо будет использовать метод связки его с нужным нижним уровнем. В конструкторе эта возможность будет недоступна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:34 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
AkhДа, кстати, вариант с MainCalled не так уж и хорош. Ставить этот флаг при запуске мэна, не очень хороший стиль.а по-моему, очень даже неплохой костыль. К тому же я предлагал разбить инициализацию на два шага. AkhМожет С++ сам ставить какой-нибудь флаг?ересь. Мейн для него - такой же метод, как и все остальные. Загляни в crt1.c, может, что и нароешь... или нет... там это как-то по-другому называется, уже не помню, смотри в скрипты линкера, там эти объектники приводятся как crt_start.o и crt_end.o... как-то так, потом смотри, из чего эти объектники компилились. Но очень сомневаюсь... хотя... можно попытаться дотянуться до потрохов массива global_ctors (и посмотреть, все ли конструкторы вызваны). Не думаю, что это будет просто. К тому же это будет баааальшой и ужасный хак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 16:52 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmoересь. Мейн для него - такой же метод, как и все остальные. Т.е. для С++ нет понятия старта программы? Или считается, что старт программы начинается с создания статических объектов? maXmoЗагляни в crt1.c, может, что и нароешь... или нет... там это как-то по-другому называется, уже не помню, смотри в скрипты линкера, там эти объектники приводятся как crt_start.o и crt_end.o... как-то так, потом смотри, из чего эти объектники компилились. Но очень сомневаюсь... хотя... можно попытаться дотянуться до потрохов массива global_ctors (и посмотреть, все ли конструкторы вызваны). Не думаю, что это будет просто. К тому же это будет баааальшой и ужасный хак. Уж лучше вы к нам (с) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:11 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
А разбиение инициализации на два шага - тоже не очень красиво. Это тоже костыль. MainCalled у меня предназначен только для предотвращения статического создания объектов. То есть это подстраховка на стадии запуска, а не в процессе работы. Ты, я так смотрю, хочешь сделать подстраховку в рантайме, то есть когда статически создаваемый объект делает вид, что всё хорошо, когда на самом деле всё плохо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:15 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmoА разбиение инициализации на два шага - тоже не очень красиво. Это тоже костыль. MainCalled у меня предназначен только для предотвращения статического создания объектов. То есть это подстраховка на стадии запуска, а не в процессе работы. Ты, я так смотрю, хочешь сделать подстраховку в рантайме, то есть когда статически создаваемый объект делает вид, что всё хорошо, когда на самом деле всё плохо? Как раз наоборот. Я хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:19 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
AkhТ.е. для С++ нет понятия старта программы? Или считается, что старт программы начинается с создания статических объектов?Ну, входная точка в код девелопера - это функция мейн. Создание статических объектов, инициализация кучи, разбор параметров командной строки, регистрация дефолтных обработчиков сигналов - это так, подготовка рабочей среды. Ты фактически вылезаешь из девелоперского кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:21 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
AkhЯ хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки.а... тогда я что-то не понял, что ты там про уровни говорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:22 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmoНу, входная точка в код девелопера - это функция мейн. Создание статических объектов, инициализация кучи, разбор параметров командной строки, регистрация дефолтных обработчиков сигналов - это так, подготовка рабочей среды. Ты фактически вылезаешь из девелоперского кода. Значит С++ дает средства для выполнения конструктора в из девелоперского кода и перед ним, но не дает средств для определения в каком коде происходит выполнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:28 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmo AkhЯ хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки.а... тогда я что-то не понял, что ты там про уровни говорил. Есть нижние уровни (допустим 1), есть верхние (допустим 2, 3...). Как стек tcp/ip. Вместо нижних, можно подставлять разные: на ком порту, на езернете, на виртуальном ком порте (с уже некоторой функциональностью). Уровень 3 говорит второму - работай с этим 1-м. При добавляении новых уровней 1 (реализована возможность работать с другой железкой) уровень 2 не должен перекомпилироваться. Все это в библиотеках Пишется приложение, к которому подлинковываются нужные либы. Приложение через уровни вниз, говорит на каком уровне 1 оно должно работать. В процессе работы возможен переход на другой уровень 1. Не помешало бы добавить возможность выбора уровня 1 в конструкторах высших над ним уровнях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 17:37 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
AkhЗначит С++ дает средства для выполнения конструктора в из девелоперского кода и перед ним, но не дает средств для определения в каком коде происходит выполнение?ну девелоперский код ты сам пишешь и там как бы всё естественно проходит. Последовательность инициализации статических объектов определяешь не ты. Ну никак это не изменить. У сипп средств для этого нет, вернее, там всё инициализируется в той последовательности, в какой объекты встретились компилеру. В сети есть спецификация ANSI C++ и там весь раздел 3.6.2 - по твоей части. Очень интересно пишут. Читай всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:04 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Молодец что прорвался через кодю Только вот главного и не заметил. В main.cpp есть typedef, определяющий MyFactory как Singleton. Если из модулей программы лбращатся к фабрике как static Singleton< Factory<K, T> > myFactory; myFactory->make(...); то Singleton гарантирует что будет создана одна копия объекта Factory<K, T> и разрушена она будет когда будут удалены все ссылки на него. Причем даже если вы обратитесь к нему из статически создаваемого обекта. Кстати если ваше приложение многопоточное надо защитить счетчик ссылок мьютексом. А что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо? Не лучше ли программировать так чтобы этого не требовалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:07 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedА что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо?да это как бы пофиг, но имхо, статические объекты создаются в статической памяти. В стандарте в частности написано, что сначала там нули, а потом на эти нули натравливается конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:15 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blinded, кстати, как-то подозрительно выглядит у тебя добавление хелперов в список. В f1.cpp и f2.cpp у тебя приводится DECLARE_FACTORY(string, Base), это выливается в два объявления Factory<string,Base>::Factory(). По-моему, это не слинкуется. То есть ты не сможешь собрать этот проект со всеми четырьмя классами Child_1, Child_2, Child_3, Child_4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:33 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedМолодец что прорвался через кодю Только вот главного и не заметил. В main.cpp есть typedef, определяющий MyFactory как Singleton. Если из модулей программы лбращатся к фабрике как static Singleton< Factory<K, T> > myFactory; myFactory->make(...); то Singleton гарантирует что будет создана одна копия объекта Factory<K, T> и разрушена она будет когда будут удалены все ссылки на него. Причем даже если вы обратитесь к нему из статически создаваемого обекта. Из модулей программы нет смысла обращаться к мэйк, так как эта функция создания объекта, а не добавлсения его в мап. В этом случае надо будет вызывать адд фабрики, и это будет происходить на стадии создания статических вспомогательных классов. Опять же возвращаемся к проблеме статического создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33877628&tid=2030780]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 378ms |

| 0 / 0 |
