Ошибки, баги, вопросы - страница 1892
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Еще такой вопрос
Работа протектора.
объясните пожалуйста что такое протектор в программировании
Да, вот пример, демонстрирующий ваш вопрос:
и вывод:Сначала проверяем неразрешенный кастинг снизу вверх и получаем NULL. Все верно.
Потом создаем объект CLASS2, присваиваем ссылку на него родительскому классу (тут важно понять, что в динамике среда знает, что исконный тип объекта CLASS2 - это хранится в его метаинформации). Далее (как раз ваш вопрос) динамически кастим (с проверкой права преобразования на основе метаинформации исходного объекта) из ссылки CLASS1 в CLASS2.
Проверяем результат кастинга и прописываем в переменную i = 1. В финале выводим значение i, обращаясь к исходно созданному объекту.
Все работает верно и по спецификации (включая dynamic_cast спеку самого C++).
Спасибо за разъяснение, теперь по приведению типов в MQL вроде понятно )) Но не понятно тогда зачем создан dynamic_cast, если снизу вверх мы не можем приводить в любом случае, а сверху вниз мы можем обойтись и без dynamic_cast? Может есть какие тонкости тут и я их не понял?
Перечитайте код и мое объяснение еще раз, пожалуйста.
В нем же продемонстрировано, как динамик каст может безопасно поднять кастинг снизу вверх на основе метаинформации исходно созданного объекта. Если объект был создан из потомка, потом преобразован в ссылку родительского класса, то на основе метаинформации(исходный объект - это реально потомок) можно безопасно преобразовать эту ссылку в потомка.
Обычно используется, когда объекты разнообразных потомков складываются в массив/список ссылок на родительский класс, а потом извлекаются и безопасно приводятся в того или иного потомка. Если приведение дало NULL, значит объект не запршенного потомка и его не надо обрабатывать.
Перечитайте код и мое объяснение еще раз, пожалуйста.
В нем же продемонстрировано, как динамик каст может безопасно поднять кастинг снизу вверх на основе метаинформации исходно созданного объекта. Если объект был создан из потомка, потом преобразован в ссылку родительского класса, то на основе метаинформации(исходный объект - это реально потомок) можно безопасно преобразовать эту ссылку в потомка.
Обычно используется, когда объекты разнообразных потомков складываются в массив/список ссылок на родительский класс, а потом извлекаются и безопасно приводятся в того или иного потомка. Если приведение дало NULL, значит объект не запршенного потомка и его не надо обрабатывать.
код я прочитал, но разве это:
CLASS2 *my_ptr2=dynamic_cast<CLASS2 *>(my_ptr);
не аналогично этому:
я саму тонкость использования dynamic_cast не могу уловить, за исключением, что при выполнении кода используя dynamic_cast мы не получим ошибку т.к. dynamic_cast в случае ошибки возвращает NULL
код я прочитал, но разве это:
не аналогично этому:
я саму тонкость использования dynamic_cast не могу уловить, за исключением, что при выполнении кода используя dynamic_cast мы не получим ошибку т.к. dynamic_cast в случае ошибки возвращает NULL
Рекомендую почитать спецификации dymanic_cast от C++ в гугле.
Это же банальщина.
При раздаче ресурсов ПК в клауд происходит сбой при запуске игры - игра "Call of Duty: Black Ops III" вылетает - был задействован 1 агент. Приоритет у агента минимальный стоял - памяти потреблял 3,5 гигабайта из 16 - в общем проблем не должно было быть. При не активных агентах игра играла нормально. Вообще проводиться тестирование на совместимость агентов с другими программами?
По чему-то сразу пришла идея, что возможно бага в игрушке и связанная она с особенностями работы на 64 битным машинах, когда программа загружена в адресное пространство > 4 Гб
По чему-то сразу пришла идея, что возможно бага в игрушке и связанная она с особенностями работы на 64 битным машинах, когда программа загружена в адресное пространство > 4 Гб
Т.е. для проверки этой гипотезы нужно забить ОЗУ более чем на 4 гигабайта и запустить игру - попробую, как сын наиграется.