Ошибки, баги, вопросы - страница 2363
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ЗЫ: немного начал понимать, что Вы предлагаете, но все равно результата нет, можно и без dynamic_cast <> обойтись, добавить поле * CObject , в теории вот так должно быть:
думаю так будет чуть быстрее работать, чем Ваш пример с dynamic_cast <> - смысл вроде один и тот же
Можно и без отдельного поля, как Вам предлагали выше делать, только через обертку в оператор.
Разница есть, маленькая такая. Если там вдруг окажется не приводимый к myclass объект, то без dynamic_cast будет ошибка выполнения, а с ним - всего лишь NULL в возврате. Что при условии немедленного к нему обращение через .х в любом случае вызовет ошибку выполнения, так что можно и не париться =)))
Если совсем делать как "доктор прописал", то нужно в случае NULL возвращать что-то типа специального экземпляра класса, созданного для обработки этой ошибки )))
П.С. Я проверял скорость dynamic_casta недавно по сравнению с обычным приведением - была вроде в случае равенства класса ожидаемому почти такая же.
П.С.С. В любом случае, for'ы там выглядят достаточно печально - при работе со списками нужно использовать циклы типа for each (вроде моего loop)не пропускает компилятор: '[' - name expected tst_cast.mq4 32 15
...
По факту-то что этой оберткой получили? Лишний dynamic_cast, когда он там совершенно не нужен? В самой обертке явное преобразование к тому же CMyClass. Т.е. рабочей нагрузки в ней 0%, а код более запутанный (оператор обращения по индексу используется в качестве оператора явного приведения передаваемого класса - ну вообще не очевидно).
П.С.С. В любом случае, for'ы там выглядят достаточно печально - при работе со списками нужно использовать циклы типа for each (вроде моего loop)
Извините, но это глупость же.
То, что Вы написали просто неявное использование того же:
Т.е. такой анонимный указатель, а по сути просто синтаксический сахар. Сахара в MQL почти нет, поэтому так не получиться сделать. Но замечу приведение типа к потомку идет без всяких там проверок и преобразований потому очень быстро, из-за этого не совсем понятно, чем Вам так не угодила явная работа с указателем.
да, я это все понимаю, никак не разберусь с синтаксисом в MQL при работе с указателями, вроде все то же самое, что и в стандартном С++, но постоянно путаюсь и не могу ни с ходу написать чтонить, ни прочитать корректно код той же библиотеки из стандартной поставки МТ.... все волосы уже себе повыдергивал! ... , но остались еще на .опе! )))) - все равно разберусь ;)
Разница есть, маленькая такая. Если там вдруг окажется не приводимый к myclass объект, то без dynamic_cast будет ошибка выполнения, а с ним - всего лишь NULL в возврате. Что при условии немедленного к нему обращение через .х в любом случае вызовет ошибку
это все понятно, да и не маленькая это разница, скажу не кривя душой, что код профессионального программиста и отличается от любительского именно вот в этой разнице - в проверке критических ошибок .... хотя при современных тенденциях в языках программирования и это упростили для ламеров-програмеров c помощью try except finally и т.п. ;)
Извините, но это глупость же.
Да пожалуйста
да, я это все понимаю, никак не разберусь с синтаксисом в MQL при работе с указателями, вроде все то же самое, что и в стандартном С++, но постоянно путаюсь и не могу ни с ходу написать чтонить, ни прочитать корректно код той же библиотеки из стандартной поставки МТ.... все волосы уже себе повыдергивал! ... , но остались еще на .опе! )))) - все равно разберусь ;)
С++ брать в качестве ориентира в случае с MQL не прокатит:) Объем того, что в MQL нельзя гораздо больше чем объем "совместимых" конструкций. Имхо, MQL больше похож на очень урезанный C# с полным отсутствием синтаксического сахара.
это все понятно, да и не маленькая это разница, скажу не кривя душой, что код профессионального программиста и отличается от любительского именно вот в этой разнице - в проверке критических ошибок .... хотя при современных тенденциях в языках программирования и это упростили для ламеров-програмеров c помощью try except finally и т.п. ;)
На самом деле Try/Catch более интересная тема, чем может показаться:) Жаль в MQL ее нет.
Кто подскажет, на что он ругается и что с этим делать
Имхо, MQL больше похож на очень урезанный C# с полным отсутствием синтаксического сахара.
ОК, с C# чет не было желания и возможностей подразобраться, пару раз открывал VS2017 на уровне С++ и знания Делфи пробовал писать под С#, дальше пока не разбирался - теперь точно повнимательнее к С# присмотрюсь
Кто подскажет, на что он ругается и что с этим делать
не знаю поможет Вам или нет, но в MQL структуры не совсем, то же что и классы, как выше упоминал Василий, MQL чем то напоминает С# - там структуры статической памяти создаются, а классы вроде в куче
вот я искал решение через описание структуры, но подсказали, что нужно в классы "обернуть" https://www.mql5.com/ru/forum/6343/page866#comment_7541747
может в классе Ваш пример будет работать?