mql5语言的特点、微妙之处以及技巧 - 页 48

 
拉希德-乌马罗夫

就是说--你需要使用 函数指针

不一定。带有重载操作符()的类也很适合这样做
 
组合器
不一定。带有重载操作符()的类也很适合这样做

在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);
}
 
阿列克谢-纳沃伊科夫

在MQL中是否可以重载这个运算符?

我不这么认为。
 

感谢每个人的回应。我将试一试,看看我能做什么。

 
与本主题无关的评论已被移至"来自MQL5 MT5 MetaTrader 5初学者的问题"。
 

如果你在if、else、while、for、do这些词后面立即按TAB键,会有一点额外的结构......

 
如果做了历史调试,输入参数值不是从源头取的,而是从测试器参数标签取的。
 
fxsaber:

如果你在if、else、while、for、do这些词后面立即按TAB键,会有一点额外的结构......

而且不仅是在他们之后。也在OnInit、OnTick、OnCalculate、OnDeinit、class等之后。而且,如果你能自己为这些构建设置一个模板,那就非常好了。
 
在优化过程中,即使没有选择自定义标准,OnTester也总是被执行。