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, for, do TAB 키를 누르면 단어 바로 뒤에 작은 추가 단어가 표시됩니다. 건물...

 
히스토리에서 디버깅이 수행되면 입력 매개변수의 값은 소스가 아니라 테스터의 매개변수 탭에서 가져옵니다.
 
fxsaber :

if, else, for, do TAB 키를 누르면 단어 바로 뒤에 작은 추가 단어가 표시됩니다. 건물...

그리고 그들 이후만은 아닙니다. 또한 OnInit, OnTick, OnCalculate, OnDeinit , 클래스 등 이후에 그리고 이러한 구성에 대한 템플릿을 직접 설정할 수 있다면 매우 좋을 것입니다.
 
최적화할 때 Custom 기준이 선택되지 않은 경우에도 OnTester는 항상 실행됩니다.