mql5言語の特徴、微妙なニュアンスとテクニック - ページ 48

 
ラシード・ウマロフ

つまり、 関数 ポインタを 使用する必要があります。

必ずしもそうではありません。オーバーライドされた演算子()を持つクラスもまた、これに最適です。
 
コンビナート です。
必ずしもそうではありません。オーバーライドされた演算子()を持つクラスもまた、これに最適です。

MQLでこの演算子をオーバーロードすることは可能ですか?

 

実際、最も汎用的で柔軟な選択肢は、もちろん関数ポインタである。異なるパラメータでソートできるようにする必要があり、クラスメソッドは1つしかありません。今のところ、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);
}
 
アレクセイ・ナヴォイコフ

MQLでこの演算子をオーバーロードすることは可能ですか?

そんなことはないだろう。
 

ご回答いただいた皆様、ありがとうございました。試しにやって見ます。

 
このトピックに関係のないコメントは、「MQL5 MT5 MetaTrader5初心者からの質問」に移動しました。
 

if, else, while, for, doの直後にTABキーを押すと、ちょっとだけ余計な構造が...。

 
ヒストリーデバッグを行う場合、入力パラメータの値はソースからではなく、テスターパラメータータブから取得されます。
 
fxsaber:

if, else, while, for, doの直後にTABキーを押すと、ちょっとだけ余計な構造が...。

そして、彼らの後だけでなく。OnInit, OnTick,OnCalculate, OnDeinit, classなどの後にも。そして、これらのビルドのためのテンプレートを自分で設定できるようになると、非常にありがたいですね。
 
最適化中は、カスタム基準が選択されていない場合でも、OnTesterは常に実行されます。
理由: