powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамическое создание объекта, тип которого указан в виде строки.
25 сообщений из 96, страница 3 из 4
динамическое создание объекта, тип которого указан в виде строки.
    #33866922
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сомневаюсь. Опять же можешь посмотреть в прагмы или ещё куда. Но ведь приложение пишешь ты, в чём запарка? Если не найдёшь способа поместить кторы регеров в начало списка кторов, пиши подстраховку. Выдавай ошибку в случае статического создания. Или ещё что придумай.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33867012
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Библиотеки пишу я. Приложения будут разные и те только я их буду писать.
2. А как выдать ошибку в случае статического создания (я это и хотел узнать).
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33867239
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
extern int MainCalled= 0 ;

int main()
{
 MainCalled= 1 ;
 ...
}

class ClassMain
{
public:
 ClassMain()
 {
  if(!MainCalled)AchtungStaticInitialization("ClassMain");
 }
}
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33867245
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где надо, дописываешь "РУКАМИ НЕ ТРОГАТЬ!!!"
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33868127
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гениально! :) Спасибо.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33868401
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, как все закрутилось!
Можно я прокомментирую? Действительно нет никакой гарантии, что статические объекты в вашем случае будут созданы в правильном порядке (наш любимый С
++ гарантирует порядок создания статических объектов только в пределах единицы компиляции). Задачку, однако, решить можно, но не просто, и без разделяемых библиотек никуда. Сам не пробовал, знаю откуда можно попробовать выдрать – это АСЕ. Есть там такой ServiceConfigurator. Идея довольно простая: делаем разделяемую библиотеку в которую складываем функции с С связыванием (описанные как extern C) каждая из которых создает объекты одного класса, который нужно создавать. Иначе сойдешь с ума с приавилами поименования своего компилятора. Делаем текстовый (xml) файл с описанием связывающий имя класса, имя разделяемой библиотеки и имя фукции. Пишем фабрику, которая в своем конструкторе читает файл описания и создает ассоциативный контейнер. Осталось только сделать из этого класса синглетон. Только такой, чтобы вовремя создавался и разрушался.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33868520
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогой Akh! Спешу обрадовать, был не прав. Сделал как ты хотел. враги полтзователи библиотек даже static смогут юзать. см attachment
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33869898
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Довел до конца. Теперь и в runtime можно добавлять элементы к фабрике
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33876509
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedДовел до конца. Теперь и в runtime можно добавлять элементы к фабрике

Не подойдет. Т.к., если мне будет необходимо подключить несколько модулей к программе, то у меня будет несколько конструкторов фабрики. Использовать один конструктор неполучится, т.к. в этом случае он будет находиться внутри основного модуля (который будет юзать нужные ему классы). Но он не знает о нужных ему классах.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877366
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты это осилил? Герой. По-моему, это были чисто стихи.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877423
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoты это осилил? Герой. По-моему, это были чисто стихи.

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

Да, кстати, вариант с MainCalled не так уж и хорош. Ставить этот флаг при запуске мэна, не очень хороший стиль. Может С++ сам ставить какой-нибудь флаг?

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

AkhМожет С++ сам ставить какой-нибудь флаг?ересь. Мейн для него - такой же метод, как и все остальные. Загляни в crt1.c, может, что и нароешь... или нет... там это как-то по-другому называется, уже не помню, смотри в скрипты линкера, там эти объектники приводятся как crt_start.o и crt_end.o... как-то так, потом смотри, из чего эти объектники компилились. Но очень сомневаюсь... хотя... можно попытаться дотянуться до потрохов массива global_ctors (и посмотреть, все ли конструкторы вызваны). Не думаю, что это будет просто. К тому же это будет баааальшой и ужасный хак.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877589
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoересь. Мейн для него - такой же метод, как и все остальные.

Т.е. для С++ нет понятия старта программы? Или считается, что старт программы начинается с создания статических объектов?

maXmoЗагляни в crt1.c, может, что и нароешь... или нет... там это как-то по-другому называется, уже не помню, смотри в скрипты линкера, там эти объектники приводятся как crt_start.o и crt_end.o... как-то так, потом смотри, из чего эти объектники компилились. Но очень сомневаюсь... хотя... можно попытаться дотянуться до потрохов массива global_ctors (и посмотреть, все ли конструкторы вызваны). Не думаю, что это будет просто. К тому же это будет баааальшой и ужасный хак.

Уж лучше вы к нам (с) :)
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877602
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разбиение инициализации на два шага - тоже не очень красиво. Это тоже костыль. MainCalled у меня предназначен только для предотвращения статического создания объектов. То есть это подстраховка на стадии запуска, а не в процессе работы. Ты, я так смотрю, хочешь сделать подстраховку в рантайме, то есть когда статически создаваемый объект делает вид, что всё хорошо, когда на самом деле всё плохо?
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877614
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoА разбиение инициализации на два шага - тоже не очень красиво. Это тоже костыль. MainCalled у меня предназначен только для предотвращения статического создания объектов. То есть это подстраховка на стадии запуска, а не в процессе работы. Ты, я так смотрю, хочешь сделать подстраховку в рантайме, то есть когда статически создаваемый объект делает вид, что всё хорошо, когда на самом деле всё плохо?

Как раз наоборот. Я хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877622
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhТ.е. для С++ нет понятия старта программы? Или считается, что старт программы начинается с создания статических объектов?Ну, входная точка в код девелопера - это функция мейн. Создание статических объектов, инициализация кучи, разбор параметров командной строки, регистрация дефолтных обработчиков сигналов - это так, подготовка рабочей среды. Ты фактически вылезаешь из девелоперского кода.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877628
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhЯ хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки.а... тогда я что-то не понял, что ты там про уровни говорил.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877654
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoНу, входная точка в код девелопера - это функция мейн. Создание статических объектов, инициализация кучи, разбор параметров командной строки, регистрация дефолтных обработчиков сигналов - это так, подготовка рабочей среды. Ты фактически вылезаешь из девелоперского кода.

Значит С++ дает средства для выполнения конструктора в из девелоперского кода и перед ним, но не дает средств для определения в каком коде происходит выполнение?
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33877680
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo AkhЯ хочу разругаться, что объект создан статически и отказываться продолжать дальше работать. Такая ошибка будет выявляться сразу же на стадии разработки.а... тогда я что-то не понял, что ты там про уровни говорил.

Есть нижние уровни (допустим 1), есть верхние (допустим 2, 3...). Как стек tcp/ip. Вместо нижних, можно подставлять разные: на ком порту, на езернете, на виртуальном ком порте (с уже некоторой функциональностью). Уровень 3 говорит второму - работай с этим 1-м.

При добавляении новых уровней 1 (реализована возможность работать с другой железкой) уровень 2 не должен перекомпилироваться.

Все это в библиотеках

Пишется приложение, к которому подлинковываются нужные либы. Приложение через уровни вниз, говорит на каком уровне 1 оно должно работать. В процессе работы возможен переход на другой уровень 1.

Не помешало бы добавить возможность выбора уровня 1 в конструкторах высших над ним уровнях.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878012
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhЗначит С++ дает средства для выполнения конструктора в из девелоперского кода и перед ним, но не дает средств для определения в каком коде происходит выполнение?ну девелоперский код ты сам пишешь и там как бы всё естественно проходит. Последовательность инициализации статических объектов определяешь не ты. Ну никак это не изменить. У сипп средств для этого нет, вернее, там всё инициализируется в той последовательности, в какой объекты встретились компилеру. В сети есть спецификация ANSI C++ и там весь раздел 3.6.2 - по твоей части. Очень интересно пишут. Читай всё.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878017
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец что прорвался через кодю Только вот главного и не заметил. В main.cpp есть typedef, определяющий MyFactory как Singleton. Если из модулей программы лбращатся к фабрике как
static Singleton< Factory<K, T> > myFactory;
myFactory->make(...);
то Singleton гарантирует что будет создана одна копия объекта Factory<K, T> и разрушена она будет когда будут удалены все ссылки на него. Причем даже если вы обратитесь к нему из статически создаваемого обекта. Кстати если ваше приложение многопоточное надо защитить счетчик ссылок мьютексом.
А что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо? Не лучше ли программировать так чтобы этого не требовалось.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878023
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedА что до вашего диспута, то понять где создается объект на стеке, в куче, или в статической памяти можно, только оно вам надо?да это как бы пофиг, но имхо, статические объекты создаются в статической памяти. В стандарте в частности написано, что сначала там нули, а потом на эти нули натравливается конструктор.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878040
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded, кстати, как-то подозрительно выглядит у тебя добавление хелперов в список. В f1.cpp и f2.cpp у тебя приводится DECLARE_FACTORY(string, Base), это выливается в два объявления Factory<string,Base>::Factory(). По-моему, это не слинкуется. То есть ты не сможешь собрать этот проект со всеми четырьмя классами Child_1, Child_2, Child_3, Child_4.
...
Рейтинг: 0 / 0
динамическое создание объекта, тип которого указан в виде строки.
    #33878589
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedМолодец что прорвался через кодю Только вот главного и не заметил. В main.cpp есть typedef, определяющий MyFactory как Singleton. Если из модулей программы лбращатся к фабрике как
static Singleton< Factory<K, T> > myFactory;
myFactory->make(...);
то Singleton гарантирует что будет создана одна копия объекта Factory<K, T> и разрушена она будет когда будут удалены все ссылки на него. Причем даже если вы обратитесь к нему из статически создаваемого обекта.

Из модулей программы нет смысла обращаться к мэйк, так как эта функция создания объекта, а не добавлсения его в мап. В этом случае надо будет вызывать адд фабрики, и это будет происходить на стадии создания статических вспомогательных классов. Опять же возвращаемся к проблеме статического создания.
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамическое создание объекта, тип которого указан в виде строки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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