powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как спрятать кастинг под капот
25 сообщений из 86, страница 3 из 4
Как спрятать кастинг под капот
    #38079662
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosh the best> я не стану вас разочаровывать, но правда наверное вам не понравится ))))
о боже!
просто напиши все это на си
так будет лучше

я как бы обеими руками за, но если бы вы хоть как-то намекнули как именно....
если вы имеете ввиду что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
stared_ptr<B> b(A* a)
{
     B* b = new B;
     memcpy(b, a, sizeof(a));  
     delete a;
     return shared_ptr<B>(b);
}

b() = b(new A);



Если вы про это, то скорее всего на строчке memcpy() нас ждет великий облом, если A содержит в себе датамеберы через указатели типа class A { int* a;};

но если вы подскажете, где взять супер функцию типа deep_memcpy() или true_memcpy() тогда было бы круто!!
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079679
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала с головой будет достаточно перестать превращать с++ в js.

1. Вы тратите много времени на борьбу с собственноручно созданными мельницами.

2. Результат все-равно на js не похож и не будет. Т.е. не достигнут. А путаница, которая будет мешать вашим "пользователям" достигнута.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079691
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix, этот вопрос вообще решают не в плоскости языка а в плоскости
алгоритмов и структур данных. Если у тебя есть такая структура как
дерево и тебе надо сделать копию поддерева то делай фукцию
copy_subtree(..) и копируй. Не вешай на С++ обязательства
которые к ЯП не имеют отношения.

Это неоправданное (и опасное) усложнение парадигмы.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079692
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О том, что вы задачу в двух топиках лаконично и понятно описать не можете - я уж вообще молчу. Вместо описания того, что вам РЕАЛЬНО надо, вы придумываете несуществующие примеры того, что вам не надо, а через 3 страницы бз всяких угрызений совести сообщаете "а, то я так, для примера привел... мы такое не юзаем, конечно". А нафига ж тогда 3 страницы обсуждали то, что вы не юзаете - не понятно.

Так что, ничему не удивляйтесь, когда обсуждается кот в мешке, а общественности то хвост покажут, то шнурки (а кот тут при чем? да ни при чем - так для примеру).
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079704
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто неоправданное (и опасное) усложнение парадигмы.
Вполне возможно, что он просто пытается создать фрейморк, аля js-овских ассоциативных массивов-объектов. Если так, то Дельфи или C# позволили бы ему достичь большей "похожести" с js. А так - разрыв шаблона из-за ярого нежелания использовать нормальные классы с нормальными методами.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079752
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonДля начала с головой будет достаточно перестать превращать с++ в js.

Знаете, в свое время я понял, что очень опасно приводить реальные примеры кода, потому что вместо помощи их станут обсирать чисто ради поднятия ЧСВ. И я стал выкладывать малюсенькие примеры. А теперь я вижу, что совершил грубейшую ошибку, упомянув как метафору js в одном из доводов и теперь весь форум думает, что я хочу превратить c++ в js и теперь каждый хочет мне сообщить, что с++ это не js. После этого случая я теперь и метафоры перестану использовать!!
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079754
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon2. Результат все-равно на js не похож и не будет. Т.е. не достигнут. А путаница, которая будет мешать вашим "пользователям" достигнута.

Вот я ещё раз эксплиситно всем сообщаю: я не пишу js на C++!!!
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079764
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonВполне возможно, что он просто пытается создать фрейморк, аля js-овских ассоциативных массивов-объектов. Если так, то ....

))))) это уже становится как: Петровна, слышала, что Медведев завел блох в свитере?

Мужики, ну хорош, а...!!)) ну какие нахрен массивы, чё вы придумываете??))) тема совсем о другом
я тему-то как назвал: как спрятать кастинг под капот
при чем тут массивы??? я фигею....
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079768
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixEdd.DragonДля начала с головой будет достаточно перестать превращать с++ в js.

Знаете, в свое время я понял, что очень опасно приводить реальные примеры кода, потому что вместо помощи их станут обсирать чисто ради поднятия ЧСВ. И я стал выкладывать малюсенькие примеры. А теперь я вижу, что совершил грубейшую ошибку, упомянув как метафору js в одном из доводов и теперь весь форум думает, что я хочу превратить c++ в js и теперь каждый хочет мне сообщить, что с++ это не js. После этого случая я теперь и метафоры перестану использовать!!
А я тебе минуту назад хотел посоветовать про Lua почитать. Так что... проехали уже?
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079821
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА я тебе минуту назад хотел посоветовать про Lua почитать. Так что... проехали уже?

Смотря о чем читать. Вы там оба ведь написали: нафиг вообще на плюсах это городить, сделай управление памятью на си. Я подумал, что речь о memcpy()

То есть если вы имеете ввиду взять сорсы луа и там будет функция deep_memcpy() тогда готов ознакомится с вашей идеей
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079855
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixmaytonА я тебе минуту назад хотел посоветовать про Lua почитать. Так что... проехали уже?

Смотря о чем читать. Вы там оба ведь написали: нафиг вообще на плюсах это городить, сделай управление памятью на си. Я подумал, что речь о memcpy()

То есть если вы имеете ввиду взять сорсы луа и там будет функция deep_memcpy() тогда готов ознакомится с вашей идеей
Парень, в Lua нет вообще 90% тех проблем которые та нарисовал.
Это язык с управляемой памятью по принципу GC. Там нет утечек.
Там нет наследования. И нет кастингов со срезкой полей или методов.
Этот язык - это просто клондайк для тебя.

И я тебя нижайше прошу не будоражить форум надуманными проблемами.
Ты вовлёк в дискурс специалистов очень высокого класса (это я тебе
как старый мембер говорю). Но потом раз... и написал сущую
ерунду. Сразу знаешь-ли както разочаровал.

Поэтому не злоупотребляй доверием и приходи сюда с интересными
вопросами. С теми которых нет в справочниках и предварительно подучив основы.

Все неинтересные мы читаем в миллионый раз и не посылаем в ФАК по той
причине что на нашем форуме этого FAQ-а (по С++) просто нет.

Успехов.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079890
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПарень, в Lua нет вообще 90% тех проблем которые та нарисовал.

Не понял фразу...
Подставьте вместо Lua другой язык программирования и какой реакции вы от меня ждете?

Парень, в C# нет вообще 90% тех проблем которые та нарисовал.
Парень, в Java нет вообще 90% тех проблем которые та нарисовал.
Парень, в Python нет вообще 90% тех проблем которые та нарисовал.
Парень, в Javascript нет вообще 90% тех проблем которые та нарисовал.


Или вы думаете, что в нашей команде кто-то станет заниматься биндингом всех с++ классов в подпространство луа??
Задача, которые мы тут обсуждаем касается С++. Причем тут луа-то?? Я и спросил, если в сорсах луа есть что-то, что поможет решить задачу про глубокое копирование, то я посмотрю сорсы, а если нет, то нам луа не нужна как инструмент... мы же не игры пишем...
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079901
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЗнаете, в свое время я понял, что очень опасно приводить реальные примеры кода
Правильно, нужно создать минимальный демонстрационный образец. Без лишнего наполнения.


Lumixи теперь весь форум думает, что я хочу превратить c++ в js
Дык, развейте домыслы. Сами же оставили пустые пятна для них ))
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо ничего развивать. Тема подходит к концу и ее пора закрывать.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079909
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixтема совсем о другом
я тему-то как назвал: как спрятать кастинг под капот
Никак.

А та проблема, из которой этот вопрос вырос, вполне возможно решается красиво и элегантно. Как знать.
Тоже самое касается и вопроса "как автоматически подчистить".
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079937
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonLumixЗнаете, в свое время я понял, что очень опасно приводить реальные примеры кода
Правильно, нужно создать минимальный демонстрационный образец. Без лишнего наполнения.

дык, так я так и делаю, а меня упрекают, что я типа прячу реальный код, в котором решаю задачу

Edd.DragonLumixи теперь весь форум думает, что я хочу превратить c++ в js
Дык, развейте домыслы. Сами же оставили пустые пятна для них ))

Позиция исчерпывающе изложена вот тут 13633846
все остальное домыслы и черновиковые мысли...
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079939
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе надо ничего развивать. Тема подходит к концу и ее пора закрывать.

Согласен.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38079940
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonLumixтема совсем о другом
я тему-то как назвал: как спрятать кастинг под капот
Никак.

А та проблема, из которой этот вопрос вырос, вполне возможно решается красиво и элегантно. Как знать.
Тоже самое касается и вопроса "как автоматически подчистить".

Решение с кастирующим аксессором обладает 100% элегантностью для нашего кодстайла.

Код: plaintext
1.
2.
3.
shared_ptr<B>& b();
shared_ptr<B>  b(A*);
b() = b(new A);



Такой подкапот 100% подходит.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080137
LumixEdd.Dragonпропущено...

Никак.

А та проблема, из которой этот вопрос вырос, вполне возможно решается красиво и элегантно. Как знать.
Тоже самое касается и вопроса "как автоматически подчистить".

Решение с кастирующим аксессором обладает 100% элегантностью для нашего кодстайла.

Код: plaintext
1.
2.
3.
shared_ptr<B>& b();
shared_ptr<B>  b(A*);
b() = b(new A);



Такой подкапот 100% подходит.
Вы взяли, как советовал, shared_ptr и тем самым избавились от Memory Leak.
Но до сих пор кастите предка в наследника, т.е. вам в вашем модуле надо будет сверху написать предупреждение: Attention! Undefined behavior of the module.
И в ChangeLog'e добавить это предупреждение.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080145
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТакой подкапот 100% подходит.
Ну вот я спрашивал - кто все это объявляет и когда/где?

Внутренности функции b ваши?
new A - пишет пользователь? Где чей код? Это так сложно расписать четко и однозначно?

Если этот вопрос не осветить, то все считается вашим. Если ваше - то нет вообще необходимости ни в шаредах, ни в подкапоте - вы просто пишете delete там, где ему место и все.

Так где появляется необходимость во всем этом, и почему вы не можете удалить самостятельно старый объект при добавлении нового? Неужели невозможное объяснить прошу?
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080182
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
реинтерпрет-кастомВы взяли, как советовал, shared_ptr и тем самым избавились от Memory Leak.
Но до сих пор кастите предка в наследника, т.е. вам в вашем модуле надо будет сверху написать предупреждение: Attention! Undefined behavior of the module.
И в ChangeLog'e добавить это предупреждение.

Я его не кастю, потому что не знаю как это сделать. см. задачу про кастинг тут 13634956
Конкретно это решение не про кастинг, а про как спрятать под капот.

Код: plaintext
1.
2.
3.
shared_ptr<B>& b();
shared_ptr<B>  b(A*) { /* я не знаю что тут писать, мне не хватает квалификации */  }
b() = b(new A); // но я точно знаю, что под капот прятать именно так
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080191
Undefined behavior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumixреинтерпрет-кастомВы взяли, как советовал, shared_ptr и тем самым избавились от Memory Leak.
Но до сих пор кастите предка в наследника, т.е. вам в вашем модуле надо будет сверху написать предупреждение: Attention! Undefined behavior of the module.
И в ChangeLog'e добавить это предупреждение.

Я его не кастю, потому что не знаю как это сделать. см. задачу про кастинг тут 13634956
Конкретно это решение не про кастинг, а про как спрятать под капот.

Код: plaintext
1.
2.
3.
shared_ptr<B>& b();
shared_ptr<B>  b(A*) { /* я не знаю что тут писать, мне не хватает квалификации */  }
b() = b(new A); // но я точно знаю, что под капот прятать именно так


Есть то что вы хотите, а есть реальность - то что происходит.
Конкретно вот в этом коде происходит реинтерпрет каст предка в наследника, как и во всех других ваших вариантах.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080195
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonНу вот я спрашивал - кто все это объявляет и когда/где?

Это объявляет макрос автоматически в месте, где прописывается объект B
чисто условно это место можно назвать файл b.h и b.cpp

Edd.DragonВнутренности функции b ваши?

Наши.

Edd.Dragonnew A - пишет пользователь? Где чей код? Это так сложно расписать четко и однозначно?

Нет, new вызывает код, который нам недоступен. Он расположен внутри динамических библиотек, которые мы используем as is, у нас есть только заголовочные и *.a файлы

мы получаем указатель через некий внешний интерфейс, который я на протяжении этих тем называл вот так

Код: plaintext
1.
2.
A* getA(); // заголовочный файл внешней либы
b() = b(getA()); // строчка в пользовательском коде



Edd.DragonЕсли этот вопрос не осветить, то все считается вашим. Если ваше - то нет вообще необходимости ни в шаредах, ни в подкапоте - вы просто пишете delete там, где ему место и все.

наши пользователи никогда не пишут delete с целью управления объектами. единственное использование delete это схлопывание стадии целиком. в этом смысле delete это всегда некий синоним closeState()

Код: plaintext
1.
b(1) = b(2); // раньше b(1) становился утечкой, теперь шареды чистят его сами



Edd.DragonТак где появляется необходимость во всем этом, и почему вы не можете удалить самостятельно старый объект при добавлении нового? Неужели невозможное объяснить прошу?

Потому что пользователям запрещено пользоваться new и delete с целью управления памятью, потому что если им это разрешить, тогда обязательно появятся ошибки из-за невнимательности, а это приведет к падению кода

архитектура системы выстроена таким образом, что у каждого класса автоматически создается аксессор если есть класс A всегда есть A* a() если есть класс Jopa, то всегда есть Jopa* jopa()

(вернее раньше так было, а сейчас все будет на шарепоинтах, но смысл тот же)

раньше можно было вызывать delete a(), а сейчас придется a().reset()
раньше a() = new A; работало, но порождало висяк

если я что-то упустил, сообщите, я добавлю
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080197
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и разумеется из-за чего я вообще пришел на этот форум
Код: plaintext
1.
2.
3.
4.
class B : public A {};
A* a();
B* b();
b() = a();
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080199
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixПотому что пользователям запрещено пользоваться new и delete
Это понятно. А внутри функции b() кому и почему запрещено пользоваться delete? Ровно в том месте, где ты принимаешь новый объект и знаешь, что старый можно удалить (на каком основании - тоже не ясно).
...
Рейтинг: 0 / 0
25 сообщений из 86, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как спрятать кастинг под капот
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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