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

 

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

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.  Или всё же есть решение?  

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

 

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

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

Причина обращения: