Пока нашёл только такое костыльное решение (пользуясь тем, что в MQL функции можно объявлять где угодно) :
struct A { // ... template<typename T> void f(T& arg) { f1(arg); } }; struct B { // ... template<typename T> void f(T& arg) { f2(arg); } }; void f1 (int arg) { } void f1 (B& arg) { } void f2 (int arg) { } void f2 (A& arg) { }
Но здесь недостаток в том, что аргумент передаётся только по ссылке, т.е. числовое значение напрямую передать нельзя.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В общем требуется реализовать примерно следующую конструкцию (упростил для удобства) :
В C++ это, разумеется, работает без проблем. А в MQL компилятор выдаёт ошибку: 'B' - struct cannot be predefined
Вариант с шаблонной функцией тоже не катит: MQL не может осилить такой вариант, когда одна из перегруженных функций является шаблоном.
Виртуальные методы для структур тоже недоступны в MQL.
В итоге получается, что такая простецкая задача нереализуема средствами MQL. Или всё же есть решение?
Сразу скажу, классы не предлагать. Интересуют именно структуры, т.к. требуется экономия памяти (нужно хранить большие массивы из этих структур) + требуется отсылать структуры во фрэймах при оптимизации (классы нельзя передавать).