Особенности языка mql5, тонкости и приёмы работы - страница 48

 
Rashid Umarov:

То есть - нужно использовать указатели на функции

Необязательно. Для этого также отлично подходят классы с переопределенным оператором ()
 
Комбинатор:
Необязательно. Для этого также отлично подходят классы с переопределенным оператором ()

А разве в MQL можно перегружать это оператор?

 

На самом деле, самый универсальный и гибкий вариант - это конечно указатели на функции.  Нужно ведь уметь сортировать по разным параметрам, а метод класса всего один.  Делегатов пока в MQL нет, поэтому остаются указатели на статические методы класса.   Вот примерно так:

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:

А разве в MQL можно перегружать это оператор?

Хз, похоже нет
 

Благодарю всех, кто откликнулся. Попробую-покумекаю.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL5 MT5 MetaTrader 5".
 

Если сразу после слов if, else, while, for, do нажать TAB, будет небольшое доп. построение...

 
Если делается отладка на истории, то значения входных параметров берутся не из исходника, а из вкладки Параметры Тестера.
 
fxsaber:

Если сразу после слов if, else, while, for, do нажать TAB, будет небольшое доп. построение...

И не только после них. Также после OnInit, OnTick, OnCalculate, OnDeinit, class и т.п. И было бы очень хорошо, если бы можно было задавать самостоятельно шаблон этих построений.
 
При оптимизации OnTester всегда выполняется, даже если не выбран Custom-критерий.