Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 48

 
Rashid Umarov:

Das heißt - Sie müssen Funktionszeiger verwenden

Nicht unbedingt. Klassen mit einem überschriebenen Operator () eignen sich ebenfalls hervorragend dafür
 
Kombinator:
Nicht unbedingt. Klassen mit einem überschriebenen Operator () eignen sich ebenfalls hervorragend dafür

Ist es möglich, diesen Operator in MQL zu überladen?

 

Die vielseitigste und flexibelste Option sind natürlich Funktionszeiger. Sie müssen in der Lage sein, nach verschiedenen Parametern zu sortieren, und es gibt nur eine Klassenmethode. Bislang gibt es in MQL keine Delegierten, so dass wir Zeiger auf statische Klassenmethoden haben. Das ist ungefähr so:

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:

Ist es möglich, diesen Operator in MQL zu überladen?

Das glaube ich nicht.
 

Vielen Dank an alle, die geantwortet haben. Ich werde es ausprobieren und sehen, was ich tun kann.

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL5 MT5 MetaTrader 5 Anfängern" verschoben.
 

Wenn Sie TAB unmittelbar nach den Wörtern if, else, while, for, do drücken, gibt es eine kleine Zusatzkonstruktion...

 
Beim History-Debugging werden die Werte der Eingabeparameter nicht aus der Quelle, sondern aus der Registerkarte Tester-Parameter übernommen.
 
fxsaber:

Wenn Sie unmittelbar nach den Wörtern if, else, while, for, do TAB drücken, gibt es eine kleine Zusatzkonstruktion...

Und nicht nur nach ihnen. Auch nach OnInit, OnTick, OnCalculate, OnDeinit, class, etc. Und es wäre sehr schön, wenn Sie selbst eine Vorlage für diese Builds einrichten könnten.
 
Während der Optimierung wird OnTester immer ausgeführt, auch wenn das Kriterium Benutzerdefiniert nicht ausgewählt ist.
Grund der Beschwerde: