powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамическое создание объекта, тип которого указан в виде строки.
21 сообщений из 96, страница 4 из 4
динамическое создание объекта, тип которого указан в виде строки.
    #33878600
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoВ сети есть спецификация ANSI C++ и там весь раздел 3.6.2 - по твоей части. Очень интересно пишут. Читай всё.

млин, никак найти не могу. где искать может помнишь?
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878606
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedА что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо? Не лучше ли программировать так чтобы этого не требовалось.

Как интересно определить?

Пока единственный выход - не давать создовать связи с нижними уровнями в конструкторе верхнего. Надо будет после создания объекта вызывать функцию привязки, что, как недавно тут обсуждалось, не является хорошим стилем
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33879758
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://anatolix.naumen.ru/Books/Index там вообще очень занятные книжечки.

blinded, сюда же наш любимый ClassMain.
Код: plaintext
1.
2.
3.
4.
5.
int main()
{
 static ClassMain ConstructorUsesMyFactory;
 static MyFactory myFactory;
...
}
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33879835
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему есть некоторое непонимание. Дело в том что глобальный 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 просто ликуются разные фабрики.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33879957
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дык Akh просил доваление класса без перекомпиляции всяких модулей-связок. Так-то с возможностью перекомпиляции вообще можно даже не извращаться.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880002
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedТеперь что касается Двойной декларации фабрики, да этого сделать нельзя. Но это не есть недостаток, наоборот это преимущество, которое снижает вероятность ошибок ибо все что касается "зарядки фабрики" собрано в одном файле.

Уже наверное 3-й раз говорю в топике, что у меня может быть несколько модулей, которые должны добавляться к фабрике.

Как правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880023
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedК сообщению приложен файл (fac2_2.zip): cкачать . Размер - 2Kb

Все молчал, молчал... вот, все же решил сказать: если будешь еще что-нибудь аттачить, запаковывай, пожалуйста, зипом попроще. Без нескольких проходов. А то у меня gunzip не берет. :)
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880033
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня 7zip схавал.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880080
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhКак правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения.

почитай это если найдешь
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880105
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) AkhКак правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения.

почитай это если найдешь

Я вчера добирался домой, взял пива и мне пришла гениальная мысль - задача, которую я решаю имеет ответ такой - драйверы. Не знаю на сколько эта мысля верна, но взглянув ни линух и форточку у меня сложилось такое впечатление.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880179
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитай, книжка про это. я не поклонник подобных извращений но почитать стоит (стоит даже купить)
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880394
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh blindedТеперь что касается Двойной декларации фабрики, да этого сделать нельзя. Но это не есть недостаток, наоборот это преимущество, которое снижает вероятность ошибок ибо все что касается "зарядки фабрики" собрано в одном файле.

Уже наверное 3-й раз говорю в топике, что у меня может быть несколько модулей, которые должны добавляться к фабрике.

Как правельно заметил maXmo, модули должны просто прилинковываться в случае ниобходимости. Компиляция только приложения, дабы программист заморачивался только редакцией его приложения.
Что-то я не пойму. Ты что пишешь набор библиотек и хочешь чтобы в зависимости от того какие библиотеки пользователь прилинковал такие классы в фабрике и оказались. Да еще чтобы фабрика была сформирована до того как ею попытаются воспользоваться из глобального статического объекта? Ну тонда ОЙ! Не знаю как это сделать и вряд-ли тебе кто поможет. Можно только скриптик накатать, который будет генерить cpp файл
Задачка имеет решение либо если бибилиотека одна (всю инициализацию в один модуль), либо если не заморачиваться с глобальными static ( в доку warning)
Извините за мой zip. Вот кому интересно. Присто я под cygwin сейчас.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880431
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedЧто-то я не пойму. Ты что пишешь набор библиотек и хочешь чтобы в зависимости от того какие библиотеки пользователь прилинковал такие классы в фабрике и оказались. Да еще чтобы фабрика была сформирована до того как ею попытаются воспользоваться из глобального статического объекта? Ну тонда ОЙ! Не знаю как это сделать и вряд-ли тебе кто поможет. Можно только скриптик накатать, который будет генерить cpp файл
Задачка имеет решение либо если бибилиотека одна (всю инициализацию в один модуль), либо если не заморачиваться с глобальными static ( в доку warning)
Извините за мой zip. Вот кому интересно. Присто я под cygwin сейчас.

Надо, все-таки внимательно читать топик. Значит, отвечаю по порядку:
1.да
2.нет. я хочу запретить создание объекта статически, который пользуется фабрикой. Т.е. конструктор объекта понимает, что его объект создается статически и говорит "Ой! segmentation fail" например. Лучше, конечно, чтобы он сказал что-нибудь члено раздельное, главное, чтобы он мог понять что-творится.

Уже мона и зипом, скачал p7zip (спасибо maXmo)
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880463
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал! Идея простая - запретить добавление к фабрике, после первого вызова метода make хоччешь сделаю и падать будет?
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880524
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedПридумал! Идея простая - запретить добавление к фабрике, после первого вызова метода make хоччешь сделаю и падать будет?

Не пойдет. Девелопер будет разрабатывать разрабатывать, все может быть будет работать нормально. Потом сделает реалайз уверенный что код написан отлично и сто раз проверен, перелинкует задом к жопе и не проверит. Приложение в последний момент может оказаться неработоспособным, хотя все было хорошо.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880733
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно это не то что вам хочется, но вме же. Кроме того рапишите ОГРОМНЫМИ БУКВАМИ В ДОКЕ и тогда это уже не ваша вина. А написать абсолютно надежные компоненты просто нельзя, всегда найдется хакер. я за 17 лет таких уродов повидал...
вот а в примере а1 -нормальный код и работает, а2 - код запрещенный, но работает (повезло), а а3 - тотже а2 но по-другому слинкованный (ну не повезло)ю Кстати чем больше проет, тем выше вероятность что не повезетю
PS Наезд по-поводу топика не принимаю, в нем ну ни слова о вашей задаче.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33880736
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Черт! забыл файло приложить
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33881222
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedPS Наезд по-поводу топика не принимаю, в нем ну ни слова о вашей задаче.

Вломак рыться по всему топику, вот, первое что попало на 3-й странице: см п.2
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33881237
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedКонечно это не то что вам хочется, но вме же. Кроме того рапишите ОГРОМНЫМИ БУКВАМИ В ДОКЕ и тогда это уже не ваша вина. А написать абсолютно надежные компоненты просто нельзя, всегда найдется хакер.

Расписать огромными буквами, это конечно же. Но их можно прочитать и забыть (я так частенько делаю :) ), а вот если программа сама будет говорить: "ну что же ты делаешь, подлец!", то это другое дело. ПО, должно само за себя отвечать.

Я беру расчет на нормальных программистов, которые должны будут заботиться о своем приложении. Если они будут извращаться над тем, что трогать не надо, это уже их проблемы.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33881253
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedа2 - код запрещенный, но работает (повезло)

у меня, кстати, не работает.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33883592
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит тебе не повезло с а2. Тем не менее можно подвести черту под дискуссией: Захотелось нам изначально странного, а именно размазать конструктор класса (фабрики) по нескольким модулям. Пользуясь тем что наш класс - Singleton и пользуясь особенностями инициализации глобальных статических переменных нам это удалось, только вот из-за неопрделенного порядка инициализации этих самых глобальных статических переменных мы не смогли гарантировать завершение конструирования фабрики до ее использования в процессе построения других глобальных статических объектов. С этим уже ничего не поделать. Можно только написать документацию. убедить потребителей не использовать глобальные статические объекты, а юзать выше упомянутый Singleton. Ну а если библиотек будет всего 2-3 то монжно пойти на ломовой способ - написать 3 или 7 объектников реализующих конструктор фабрики (см предпоследнюю версию) А чтобы не ошибится в каждой бибилиотеке иметь функцию. добавляющую классы размещенные в библиотеке к фабрике. а в реализации конструкторов дергать нужные функции. И так и поставлять 3 библиотеки и 7 отдельных объектников
А здорово развлеклись... Еще такой вопрос хочу...
...
Рейтинг: 0 / 0
21 сообщений из 96, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамическое создание объекта, тип которого указан в виде строки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]