Caractéristiques du langage mql5, subtilités et techniques - page 48

 
Rashid Umarov:

C'est-à-dire que vous devez utiliser des pointeurs de fonction.

Pas nécessairement. Les classes avec un opérateur surchargé () sont également parfaites pour cela.
 
Combinateur:
Pas nécessairement. Les classes avec un opérateur surchargé () sont également parfaites pour cela.

Est-il possible de surcharger cet opérateur dans MQL ?

 

En fait, l'option la plus polyvalente et la plus flexible est, bien sûr, les pointeurs de fonction. Vous devez être en mesure de trier par différents paramètres, et il n'existe qu'une seule méthode de classe. Jusqu'à présent, il n'y a pas de délégués dans MQL, nous avons donc des pointeurs vers des méthodes de classe statiques. C'est à peu près comme ça :

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:

Est-il possible de surcharger cet opérateur dans MQL ?

Je ne pense pas.
 

Merci à tous ceux qui ont répondu. Je vais faire un essai et voir ce que je peux faire.

 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL5 MT5 MetaTrader 5".
 

Si vous appuyez sur TAB immédiatement après les mots if, else, while, for, do, il y a une petite construction supplémentaire...

 
Si le débogage de l'historique est effectué, les valeurs des paramètres d'entrée ne sont pas extraites de la source, mais de l'onglet Paramètres du testeur.
 
fxsaber:

Si vous appuyez sur TAB immédiatement après les mots if, else, while, for, do, il y a une petite construction supplémentaire...

Et pas seulement après eux. Aussi après OnInit, OnTick, OnCalculate, OnDeinit, classe, etc. Et ce serait très bien si vous pouviez créer vous-même un modèle pour ces constructions.
 
Pendant l'optimisation, OnTester est toujours exécuté, même si le critère Personnalisé n'est pas sélectionné.