Ошибки, баги, вопросы - страница 1891
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Конечно.
Точно? Потому что dynamic_cast чаще всего как раз нужен для приведения снизу вверх, от родителя к потомку.
Мало того, в MQL он отлично приводит снизу вверх даже в том случае когда не должен:
Вы посмотрите на обсуждаемый кусок кода MQL5.
Да, он не должен работать, и выше уже объяснили почему, но совсем не потому что каст снизу вверх невозможен.
если мы приведем указатель сверху вниз, т.е. к родителю, после чего передадим указатель куда нить в другую область видимости, то там будут доступны поля потомка?
Да, вот пример, демонстрирующий ваш вопрос:
и вывод:Сначала проверяем неразрешенный кастинг снизу вверх и получаем NULL. Все верно.
Потом создаем объект CLASS2, присваиваем ссылку на него родительскому классу (тут важно понять, что в динамике среда знает, что исконный тип объекта CLASS2 - это хранится в его метаинформации). Далее (как раз ваш вопрос) динамически кастим (с проверкой права преобразования на основе метаинформации исходного объекта) из ссылки CLASS1 в CLASS2.
Проверяем результат кастинга и прописываем в переменную i = 1. В финале выводим значение i, обращаясь к исходно созданному объекту.
Все работает верно и по спецификации (включая dynamic_cast спеку самого C++).
Точно? Потому что dynamic_cast чаще всего как раз нужен для приведения снизу вверх, от родителя к потомку.
Мало того, в MQL он отлично приводит снизу вверх даже в том случае когда не должен:
Точно:
Не забывайте обновляться на последние билды. Я сейчас тестируюсь на 1598, который выкладывался недавно в виде зипов в этой ветке вроде.
Не забывайте обновляться на последние билды.
Да, старый билд.
Все верно, нельзя приводиться снизу вверх, только сверху вниз. Это ради безопасности.
Да, старый билд.
Вы вот это потрите, вводит в заблуждение и напрямую противоречит функционированию dynamic_castВ рамках поднятого примера кастинга в лоб CLASS1 -> CLASS2 все верно сказал. Именно такой кастинг в большинстве случаев люди и имеют в голове.
Кроме того, именно "нельзя приводиться снизу вверх, только сверху вниз" лежит в основе проверки безопасности dynamic_cast.
Те, кто знает что делает, тот понимает суть динамического кастинга.
Не забывайте обновляться на последние билды. Я сейчас тестируюсь на 1598, который выкладывался недавно в виде зипов в этой ветке вроде.
Компилятор и исполнитель в каком exe-файле сидит?
Сейчас в MT4b1080 идет MEb1599. Прошу пояснить, что делает metaeditor.exe и terminal.exe.
Компилятор и исполнитель в каком exe-файле сидит?
Сейчас в MT4b1080 идет MEb1599. Прошу пояснить, что делает metaeditor.exe и terminal.exe.
Компилятор для обоих платформ единый. Он в metaeditor.exe
А исполнитель, который проверяет тот же dynamic_cast, в terminal.exe ?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.05.11 13:26
Почему EX5 такого кодавесит 5 Кб?