Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychLumix я хочу чтобы строчка b() = new A; помещала адрес этого объекта в указатель globalStore сейчас с этой задачей справляется строчка b() = (B*) new A;нет, не справляется. в этой строчке - ошибка, и она со всей серьёзностью проявит себя как только класс B начнёт содержать поля, которых нет в родителе. С большой долей вероятности ошибка будет проявляться в самых неожиданных частях программы, казалось бы, никак не связанных с написанным здесь кодом Можете сформулировать конкретную модель угрозы, если я утверждаю, что в этом случае b() будет 100% использоваться только по А фейсу?? то есть только в условиях типа Код: plaintext 1. 2. 3. вот такое 100% исключено Код: plaintext 1. 2. 3. egorych Всем, всем, всем: надеюсь вы понимаете, что своими советами вы рождаете чудовище? Он ведь библиотечный код пишет, кому-то ведь достанется _это_ Я наоборот о людях забочусь!! чтобы им было комфортнее работать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:27 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
LumixМожете сформулировать конкретную модель угрозы, если я утверждаю, что в этом случае b() будет 100% использоваться только по А фейсу?? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. например LumixЯ наоборот о людях забочусь!! чтобы им было комфортнее работать...бессонные ночи в отладке чужого кода, на мой взгляд, не то, что можно было назвать комфортом в работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:47 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumixя утверждаю, что в этом случае b() будет 100% использоваться только по А фейсу??задлянафига тогда и globalStore, и b() возвращают B*??? вырази свою мысль прямо и точно: Код: plaintext 1. 2. всё, все проблемы решены, клиенты твоей библиотеки не сидят ночами в поисках причин падения безобидного кода, всем бабушкам выплатили пенсию, а ты сидишь счастливый на пляже в обнимку с красивой девушкой и попиваешь молочный коктейль через трубочку. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 17:59 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychнапример я так и не понял ничего про угрозу, потому что ваш пример у меня отлично компилится и работает как надо на что вы намекали я так и не понял... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. egorychбессонные ночи в отладке чужого кода, на мой взгляд, не то, что можно было назвать комфортом в работе. что-то я не припомню, чтобы кому-то приходилось заниматься отладкой кода, который я сдал в боевое использование...наоборот всем нравится, что благодаря моим решениям можно забыть про всякие штуки дрюки с плюсами и сосредоточится на самой программе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 18:52 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
забыл в примере: если первой строчкой вставить b()->print(); то пишет В то есть тоже все круто работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 18:54 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychзадлянафига тогда и globalStore, и b() возвращают B*??? вырази свою мысль прямо и точно: Код: plaintext 1. 2. потому что №1 Код: plaintext 1. 2. 3. 4. потому что №2 Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 19:00 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumixвот такое 100% исключено Код: plaintext 1. 2. 3. Скажите, пожалуйста, каким образом вы гарантируете выполнение этого требования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 23:53 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
MozokСкажите, пожалуйста, каким образом вы гарантируете выполнение этого требования? Ну как же - строгая гарантия методом "на все воля божия" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 00:04 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumixреинтерпрет-кастом Код: plaintext 1. 2. кстати, а зачем тут ссылка?? ведь вроде shared для того и придумали, чтобы их можно было кидать через копии на границах между функциями... вроде ссылка нужна если бы вы построили решение на обычных умных указателях... Смотрите в этом случае: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. А в этом случае, без &: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Позапускайте этот код с & и без: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 01:10 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Поправка :) А в этом случае, без &: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 01:11 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorych Всем, всем, всем: надеюсь вы понимаете, что своими советами вы рождаете чудовище? Он ведь библиотечный код пишет, кому-то ведь достанется _это_ А как название этой библиотеки? Врага нужно знать в лицо! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 01:12 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
реинтерпрет-кастомПозапускайте этот код с & и без: [/src] про ссылку понятно, спасибо теперь я кажется понял, что имел ввиду MasterZiv в соседней ветке 13622566 но в примере вы каким-то образом изменили условия задачи и движетесь в каком-то своем направлении, а именно: у вас shared_ptr<A>, а в задаче надо shared_ptr<B> вот полностью рабочий пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:52 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Пока решение с оператором равно не найдено, запасным вариантом является вот это решение но в нем динамик кастинг не работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 15:57 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumixegorychзадлянафига тогда и globalStore, и b() возвращают B*??? вырази свою мысль прямо и точно: Код: plaintext 1. 2. потому что №1 Код: plaintext 1. 2. 3. 4. потому что №2 Код: plaintext 1. а во, нашлось ))) не вижу, чем "потому что №1" и "потому что №2" мешает сделать globalStorage указателем на A. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 16:01 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychLumixпропущено... потому что №1 Код: plaintext 1. 2. 3. 4. потому что №2 Код: plaintext 1. а во, нашлось ))) не вижу, чем "потому что №1" и "потому что №2" мешает сделать globalStorage указателем на A. в event2() могут быть обращения c b() как с B разумеется внутри usage() гарантируется, что B будет использоваться только как А но принимая во внимание пример, который вы привели тут 13626522 я понимаю, что b() = new A невозможно осуществить в принципе по причинам изложенным в моем выводе вот тут 13627171 пока что я в печали, но потом когда я приободрюсь и полученная инфа уложится в голове, возможно, я пойду по пути что-то типа: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 16:44 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
LumixПока решение с оператором равно не найдено, запасным вариантом является вот это решение но в нем динамик кастинг не работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. так чисто для истории, если кому-то эта тема в поиск попадется: с динамик кастингом получился облом детали смотрите тут 13627171 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 16:46 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumixв event2() могут быть обращения c b() как с Bа вот тут как раз тебе поможет dynamic_cast: Код: plaintext 1. 2. 3. 4. а чтобы быть уверенным, что класс A можно использовать в качестве базового, оберни его в переходник, и от него уже наследуй свои замечательные другие классы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. что-то вроде этого, на правах сырой идеи, а не конечной реализации, потому что работать надо через смарт-указатели, и т.д., и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:03 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumix, я искренне надеюсь, что ты еще студент, а не работаешь и твой код не идет в продакшон! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:29 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychLumixв event2() могут быть обращения c b() как с Bа вот тут как раз тебе поможет dynamic_cast: Код: plaintext 1. 2. 3. 4. а зачем, если у нас b() это 100% гарантия, что там B, ведь кастинг A => B оказался невозможен, причем именно благодаря вашим объяснениям!! если код требует if( dynamic_cast< B* >( b() ) ) { это значит я плохо справляюсь со своей работой и зря ем свой хлеб))) egorychа чтобы быть уверенным, что класс A можно использовать в качестве базового, оберни его в переходник, и от него уже наследуй свои замечательные другие классы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. что-то вроде этого, на правах сырой идеи, а не конечной реализации, потому что работать надо через смарт-указатели, и т.д., и т.п. я понимаю, что это возможно технически, но никто этого делать не станет тупо по экономическим и временнЫм причинам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:38 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
kosh the bestLumix, я искренне надеюсь, что ты еще студент, а не работаешь и твой код не идет в продакшон! я не стану вас разочаровывать, но правда наверное вам не понравится )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:39 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
egorychLumixв event2() могут быть обращения c b() как с Bа вот тут как раз тебе поможет dynamic_cast: Код: plaintext 1. 2. 3. 4. я обдумал эту идею A* b() это невозможно в принципе с сигнатурной точки зрения, потому что в голове пользователей уже сидит правило, что A* a(); B* b(); но то, что вы предложили это по нашим правилам можно оформить так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 22:13 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
Lumix Код: plaintext 1. 2. Это шутка такая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 23:29 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
MozokLumix Код: plaintext 1. 2. Это шутка такая? Это пожалуй лучшая строчка из всего кода автора. Соптимизируется до: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 23:45 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
> я не стану вас разочаровывать, но правда наверное вам не понравится )))) о боже! просто напиши все это на си так будет лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 12:03 |
|
||
|
Как спрятать кастинг под капот
|
|||
|---|---|---|---|
|
#18+
kosh the best, +1 меня тоже всегда поражали выкрутасы в С++ когда формально задача на уровне постановки уже давно могла быть решена с использованием банальных процедуральных каллбеков. И API бы выглядел от этого только чище. И все проблемы С++ по большей части надуманны теми кто пишет код и сам себе Буратино. Не пишите так и проблем не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 12:47 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38078341&tid=2020587]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
3ms |
| others: | 275ms |
| total: | 580ms |

| 0 / 0 |
