Скачать MetaTrader 5

Нереализуемо в MQL ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Navoykov
4028
Alexey Navoykov  

В общем требуется реализовать примерно следующую конструкцию (упростил для удобства) :

struct B; struct A {   // ...

void f(int arg) { }   void f(B& arg) { } }; struct B {   // ... 

void f(int arg) { }   void f(A& arg) { } };

В C++ это, разумеется, работает без проблем.  А в MQL компилятор выдаёт ошибку:   'B' - struct cannot be predefined

Вариант с шаблонной функцией тоже не катит:  MQL не может осилить такой вариант, когда одна из перегруженных функций является шаблоном.

Виртуальные методы для структур тоже недоступны в MQL.

В итоге получается, что такая простецкая задача нереализуема средствами MQL.  Или всё же есть решение?  

Сразу скажу, классы не предлагать. Интересуют именно структуры, т.к. требуется экономия памяти (нужно хранить большие массивы из этих структур) + требуется отсылать структуры во фрэймах при оптимизации (классы нельзя передавать).

Alexey Navoykov
4028
Alexey Navoykov  

Пока нашёл только такое костыльное решение (пользуясь тем, что в 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) {  }

Но здесь недостаток в том, что аргумент передаётся только по ссылке, т.е. числовое значение напрямую передать нельзя.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий