Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 48

 
Rashid Umarov:

Cioè: dovete usare i puntatori a funzione

Non necessariamente. Le classi con un operatore sovrascritto () sono anche ottime per questo
 
Combinatore:
Non necessariamente. Le classi con un operatore sovrascritto () sono anche ottime per questo

È possibile sovraccaricare questo operatore in MQL?

 

Infatti, l'opzione più versatile e flessibile è, ovviamente, i puntatori di funzione. Avete bisogno di essere in grado di ordinare per diversi parametri, e c'è solo un metodo di classe. Finora, non ci sono delegati in MQL, quindi abbiamo puntatori a metodi statici di classe. Questo è all'incirca così:

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:

È possibile sovraccaricare questo operatore in MQL?

Non credo.
 

Grazie a tutti quelli che hanno risposto. Farò un tentativo e vedrò cosa posso fare.

 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL5 MT5 MetaTrader 5".
 

Se premi TAB subito dopo le parole if, else, while, for, do, c'è una piccola costruzione extra...

 
Se viene fatto il debug della storia, i valori dei parametri di ingresso non sono presi dal sorgente, ma dalla scheda Tester Parameters.
 
fxsaber:

Se premi TAB subito dopo le parole if, else, while, for, do, c'è una piccola costruzione extra...

E non solo dopo di loro. Anche dopo OnInit, OnTick, OnCalculate, OnDeinit, classe, ecc. E sarebbe molto bello se tu stesso potessi impostare un modello per queste costruzioni.
 
Durante l'ottimizzazione, OnTester viene sempre eseguito anche se il criterio Custom non è selezionato.