Características del lenguaje mql5, sutilezas y técnicas - página 48

 
Rashid Umarov:

Es decir, hay que utilizar punteros de función

No necesariamente. Las clases con un operador anulado () también son excelentes para esto
 
Combinador:
No necesariamente. Las clases con un operador anulado () también son excelentes para esto

¿Es posible sobrecargar este operador en MQL?

 

De hecho, la opción más versátil y flexible es, por supuesto, los punteros de función. Es necesario poder ordenar por diferentes parámetros, y sólo hay un método de clase. Hasta ahora, no hay delegados en MQL, por lo que tenemos punteros a los métodos de la clase estática. Esto es aproximadamente así:

struct DrawData
{
  typedef int(*CompareDrawData)(const DrawData& obj1, const DrawData& obj2); 
  
  static int ComparePrice(const DrawData& obj1, const DrawData& obj2) { return obj1.price > obj2.price ? 1 : obj1.price < obj2.price ? -1 : 0; } 
  static int ComparePercent(const DrawData& obj1, const DrawData& obj2) { return obj1.percent > obj2.percent ? 1 : obj1.percent < obj2.percent ? -1 : 0; } 
  
  float price;
  float percent;
};


template<typename T1, typename T2>
void Sort(T1& array[], T2 comparer)
{
  //.......
}


void Main()
{
   DrawData items[];
   // filling
   Sort(items, (CompareDrawData)DrawData::ComparePrice);
}
 
Alexey Navoykov:

¿Es posible sobrecargar este operador en MQL?

No lo creo.
 

Gracias a todos los que han respondido. Lo intentaré y veré qué puedo hacer.

 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL5 MT5 MetaTrader 5".
 

Si se pulsa TAB inmediatamente después de las palabras if, else, while, for, do, hay una pequeña construcción extra...

 
Si se realiza la depuración del historial, los valores de los parámetros de entrada no se toman de la fuente, sino de la pestaña Parámetros del comprobador.
 
fxsaber:

Si se pulsa TAB inmediatamente después de las palabras if, else, while, for, do, hay una pequeña construcción extra...

Y no sólo después de ellos. También después de OnInit, OnTick, OnCalculate, OnDeinit, clase, etc. Y estaría muy bien que tú mismo pudieras crear una plantilla para estas construcciones.
 
Durante la optimización, OnTester se ejecuta siempre aunque no se haya seleccionado el criterio Personalizado.
Razón de la queja: