Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Такой код, наверное, может помочь, когда очень замысловато что-то написано и совсем не очевидно распутать последовательность шаблонов, макросов и специализаций.
Кстати, по поводу замысловатости и неочевидности. Вот допустим берём тот макрос _C из вашей библиотеки, который вы использовали выше, и используем его повсеместно в нашем проекте. Компилируем проект - и получаем ошибку в Вашей библиотеке:
'A' has objects and cannot be used as union member TypeToBytes.mqh 47 15
Допустим мы проверили и убедились, что A действительно имеет объекты. Какие дальнейшие действия, чтобы понять откуда был вызван этот макрос? (а он вызывается из сотни мест)
А код был такой:
Кстати, по поводу замысловатости и неочевидности. Вот допустим берём тот макрос _C из вашей библиотеки, который вы использовали выше, и используем его повсеместно в нашем проекте. Компилируем проект - и получаем ошибку в Вашей библиотеке:
Допустим мы проверили и убедились, что A действительно имеет объекты. Какие дальнейшие действия, чтобы понять откуда был вызван этот макрос? (а он вызывается из сотни мест)
А код был такой:
Если делается замена в коде, то постепенно. Это как при написании каждого куска программы проверять его правильность. Ваш же метод - написать все куски, а потом проверять.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Предложение - кастинг структур от базовых к производным
pavlick_, 2019.01.21 15:39
Для простого обнаружения неверного вызова можно так (да, костыль и всё такое)
Когда получена ошибка и об отсутствующем члене и непонятно куда копать, делаем дефайн TCOMPARE_CHECK и получаем понятное 'a' - parameter conversion not allowed в месте вызова с интом.
Кстати, спасибо за идею. Я её взял на вооружение, немного подшаманил, и получился более удобный и изящный вариант:
Достаточно ещё немного пошаманить и можно сделать один универсальный макрос для любых интерфейсов.
Фактически это единственное рабочее решение для структур в MQL, позволяющее избежать оборачивание функций в макросы.
получился более удобный и изящный вариант
Вроде неплохо. Только отсутствие множественного наследования станет узким местом, наверное.
Вроде неплохо. Только отсутствие множественного наследования станет узким местом, наверное.
Это да. Но я давно пользуюсь альтернативным вариантом: все интерфейсы изначально оформляю в виде промежуточного шаблонного класса:
Таким образом можно создавать цепочку наследования из любого числа таких интерфейсов. Да, конечно dynamic_cast с ними не сделаешь, но это не такая уж и частая необходимость. Главная задача - это передача в функции.Так и не понял, что хотелось получить?