|
|
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
maXmoВ сети есть спецификация ANSI C++ и там весь раздел 3.6.2 - по твоей части. Очень интересно пишут. Читай всё. млин, никак найти не могу. где искать может помнишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 10:34 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedА что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо? Не лучше ли программировать так чтобы этого не требовалось. Как интересно определить? Пока единственный выход - не давать создовать связи с нижними уровнями в конструкторе верхнего. Надо будет после создания объекта вызывать функцию привязки, что, как недавно тут обсуждалось, не является хорошим стилем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 10:36 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
http://anatolix.naumen.ru/Books/Index там вообще очень занятные книжечки. blinded, сюда же наш любимый ClassMain. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 14:37 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
По-моему есть некоторое непонимание. Дело в том что глобальный static и static внутри модуля есть две большие разницы. Один инициализируется до main, другой при первом входе в модуль. Теперь взгляните на Singleton - это совсем не сам объект - это placeholder для объекта. Сам объект фабрики ежели к нему обращатся через static Singleton < Factory <std::string, Base> > будет создан только один раз. Теперь давайте посмотрим что произойдет, если к фабрике обратятся из конструктора некоторого глобального статического объекта вышеуказанным способом. Будет проинициализирован статический объект Singleton. Singleton посмотрит на счетчик ссылок, он 0 (встроенный тип инициализирован константой все и так ясно на этапе компиляции), и создаст требуемый объект на heap'e, увеличив счетчик ссылок на 1. Важно что синглетон статический, иначе при выходе из модуля для него будет вызван деструктор, счетчик ссылок уменьшится на 1, и фабрика тоже будет разрушена. Но тем не мене, когда вы начнете из коструктора глобального статического объекта обращатся к синглетону фабрики, для фабрики гарантированно вызван конструктор, а сама фабрика расположена на heap'е. Если кто не верит - смотрите attachment(руки мне оторвать за такой main). Теперь что касается Двойной декларации фабрики, да этого сделать нельзя. Но это не есть недостаток, наоборот это преимущество, которое снижает вероятность ошибок ибо все что касается "зарядки фабрики" собрано в одном файле. Файлы f1.cpp f2.cpp сделаны для того чтобы показать как простой перелинковкой изменить поведение приложения. У меня например есть программы которые пишут либо в файл либо в базу данных. Причем различие в только makefile просто ликуются разные фабрики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 14:55 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
ну дык Akh просил доваление класса без перекомпиляции всяких модулей-связок. Так-то с возможностью перекомпиляции вообще можно даже не извращаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 15:25 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedТеперь что касается Двойной декларации фабрики, да этого сделать нельзя. Но это не есть недостаток, наоборот это преимущество, которое снижает вероятность ошибок ибо все что касается "зарядки фабрики" собрано в одном файле. Уже наверное 3-й раз говорю в топике, что у меня может быть несколько модулей, которые должны добавляться к фабрике. Как правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 15:36 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedК сообщению приложен файл (fac2_2.zip): cкачать . Размер - 2Kb Все молчал, молчал... вот, все же решил сказать: если будешь еще что-нибудь аттачить, запаковывай, пожалуйста, зипом попроще. Без нескольких проходов. А то у меня gunzip не берет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 15:41 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
у меня 7zip схавал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 15:43 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
AkhКак правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения. почитай это если найдешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 15:53 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhКак правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения. почитай это если найдешь Я вчера добирался домой, взял пива и мне пришла гениальная мысль - задача, которую я решаю имеет ответ такой - драйверы. Не знаю на сколько эта мысля верна, но взглянув ни линух и форточку у меня сложилось такое впечатление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 16:00 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
почитай, книжка про это. я не поклонник подобных извращений но почитать стоит (стоит даже купить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 16:21 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Akh blindedТеперь что касается Двойной декларации фабрики, да этого сделать нельзя. Но это не есть недостаток, наоборот это преимущество, которое снижает вероятность ошибок ибо все что касается "зарядки фабрики" собрано в одном файле. Уже наверное 3-й раз говорю в топике, что у меня может быть несколько модулей, которые должны добавляться к фабрике. Как правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения. Что-то я не пойму. Ты что пишешь набор библиотек и хочешь чтобы в зависимости от того какие библиотеки пользователь прилинковал такие классы в фабрике и оказались. Да еще чтобы фабрика была сформирована до того как ею попытаются воспользоваться из глобального статического объекта? Ну тонда ОЙ! Не знаю как это сделать и вряд-ли тебе кто поможет. Можно только скриптик накатать, который будет генерить cpp файл Задачка имеет решение либо если бибилиотека одна (всю инициализацию в один модуль), либо если не заморачиваться с глобальными static ( в доку warning) Извините за мой zip. Вот кому интересно. Присто я под cygwin сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 17:19 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedЧто-то я не пойму. Ты что пишешь набор библиотек и хочешь чтобы в зависимости от того какие библиотеки пользователь прилинковал такие классы в фабрике и оказались. Да еще чтобы фабрика была сформирована до того как ею попытаются воспользоваться из глобального статического объекта? Ну тонда ОЙ! Не знаю как это сделать и вряд-ли тебе кто поможет. Можно только скриптик накатать, который будет генерить cpp файл Задачка имеет решение либо если бибилиотека одна (всю инициализацию в один модуль), либо если не заморачиваться с глобальными static ( в доку warning) Извините за мой zip. Вот кому интересно. Присто я под cygwin сейчас. Надо, все-таки внимательно читать топик. Значит, отвечаю по порядку: 1.да 2.нет. я хочу запретить создание объекта статически, который пользуется фабрикой. Т.е. конструктор объекта понимает, что его объект создается статически и говорит "Ой! segmentation fail" например. Лучше, конечно, чтобы он сказал что-нибудь члено раздельное, главное, чтобы он мог понять что-творится. Уже мона и зипом, скачал p7zip (спасибо maXmo) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 17:30 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Придумал! Идея простая - запретить добавление к фабрике, после первого вызова метода make хоччешь сделаю и падать будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 17:39 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedПридумал! Идея простая - запретить добавление к фабрике, после первого вызова метода make хоччешь сделаю и падать будет? Не пойдет. Девелопер будет разрабатывать разрабатывать, все может быть будет работать нормально. Потом сделает реалайз уверенный что код написан отлично и сто раз проверен, перелинкует задом к жопе и не проверит. Приложение в последний момент может оказаться неработоспособным, хотя все было хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 17:55 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Конечно это не то что вам хочется, но вме же. Кроме того рапишите ОГРОМНЫМИ БУКВАМИ В ДОКЕ и тогда это уже не ваша вина. А написать абсолютно надежные компоненты просто нельзя, всегда найдется хакер. я за 17 лет таких уродов повидал... вот а в примере а1 -нормальный код и работает, а2 - код запрещенный, но работает (повезло), а а3 - тотже а2 но по-другому слинкованный (ну не повезло)ю Кстати чем больше проет, тем выше вероятность что не повезетю PS Наезд по-поводу топика не принимаю, в нем ну ни слова о вашей задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 19:48 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Черт! забыл файло приложить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 19:50 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedPS Наезд по-поводу топика не принимаю, в нем ну ни слова о вашей задаче. Вломак рыться по всему топику, вот, первое что попало на 3-й странице: см п.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 09:38 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedКонечно это не то что вам хочется, но вме же. Кроме того рапишите ОГРОМНЫМИ БУКВАМИ В ДОКЕ и тогда это уже не ваша вина. А написать абсолютно надежные компоненты просто нельзя, всегда найдется хакер. Расписать огромными буквами, это конечно же. Но их можно прочитать и забыть (я так частенько делаю :) ), а вот если программа сама будет говорить: "ну что же ты делаешь, подлец!", то это другое дело. ПО, должно само за себя отвечать. Я беру расчет на нормальных программистов, которые должны будут заботиться о своем приложении. Если они будут извращаться над тем, что трогать не надо, это уже их проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 09:42 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
blindedа2 - код запрещенный, но работает (повезло) у меня, кстати, не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 09:46 |
|
||
|
динамическое создание объекта, тип которого указан в виде строки.
|
|||
|---|---|---|---|
|
#18+
Значит тебе не повезло с а2. Тем не менее можно подвести черту под дискуссией: Захотелось нам изначально странного, а именно размазать конструктор класса (фабрики) по нескольким модулям. Пользуясь тем что наш класс - Singleton и пользуясь особенностями инициализации глобальных статических переменных нам это удалось, только вот из-за неопрделенного порядка инициализации этих самых глобальных статических переменных мы не смогли гарантировать завершение конструирования фабрики до ее использования в процессе построения других глобальных статических объектов. С этим уже ничего не поделать. Можно только написать документацию. убедить потребителей не использовать глобальные статические объекты, а юзать выше упомянутый Singleton. Ну а если библиотек будет всего 2-3 то монжно пойти на ломовой способ - написать 3 или 7 объектников реализующих конструктор фабрики (см предпоследнюю версию) А чтобы не ошибится в каждой бибилиотеке иметь функцию. добавляющую классы размещенные в библиотеке к фабрике. а в реализации конструкторов дергать нужные функции. И так и поставлять 3 библиотеки и 7 отдельных объектников А здорово развлеклись... Еще такой вопрос хочу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 20:53 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33880736&tid=2030780]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 402ms |

| 0 / 0 |
