Características da linguagem mql5, subtilezas e técnicas - página 48

 
Rashid Umarov:

Ou seja - você precisa usar apontadores de funções

Não necessariamente. As aulas com um operador anulado () também são ótimas para isso
 
Combinador:
Não necessariamente. As aulas com um operador anulado () também são ótimas para isso

É possível sobrecarregar este operador em MQL?

 

Na verdade, a opção mais versátil e flexível é, naturalmente, a de apontadores de funções. Você precisa ser capaz de ordenar por diferentes parâmetros, e só há um método de classe. Até agora, não há delegados na MQL, por isso temos indicações de métodos de classe estáticos. Isto é aproximadamente como isto:

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:

É possível sobrecarregar este operador em MQL?

Eu não acho.
 

Obrigado a todos os que responderam. Vou tentar e ver o que posso fazer.

 
Comentários não relacionados a este tópico foram movidos para "Perguntas dos iniciantes do MQL5 MT5 MetaTrader 5".
 

Se você pressionar TAB imediatamente após as palavras se, caso contrário, enquanto, para, fazer, há um pouco mais de construção...

 
Se a depuração do histórico for feita, os valores dos parâmetros de entrada não são tirados da fonte, mas da guia Parâmetros do Testador.
 
fxsaber:

Se você pressionar TAB imediatamente após as palavras se, caso contrário, enquanto, para, fazer, há um pouco mais de construção...

E não só depois deles. Também depois do OnInit, OnTick, OnCalculate, OnDeinit, classe, etc. E seria muito bom se você mesmo pudesse montar um modelo para estas construções.
 
Durante a optimização, o OnTester é sempre executado mesmo que o critério Personalizado não esteja seleccionado.