열거 형을 순차적으로 반복하는 방법은 무엇입니까? - 페이지 5

 
Sergei Vladimirov :
왜 갑자기?
MIX의 TickSize는 25이고 Digits는 0입니다. 25의 배수가 아닌 정수 가격을 정규화하면 OrderSend 오류가 발생합니다.
 
fxsaber :
MIX의 TickSize는 25이고 Digits는 0입니다. 25의 배수가 아닌 정수 가격을 정규화하면 OrderSend 오류가 발생합니다.
바로 다음 지점에서 나는 당신에게 컴퓨터를 욕조에 익사시키라고 조언했습니다. 그러면 모든 것이 훨씬 더 신용이 떨어질 것입니다.
 
Dmitry Fedoseev :
바로 다음 지점에서 나는 당신에게 컴퓨터를 욕조에 익사시키라고 조언했습니다. 그러면 모든 것이 훨씬 더 신용이 떨어질 것입니다.
불행히도 당신은 광팬입니다. 나는 아무것도 만들지 않지만 당신에 대해 저주할 권리가 있습니다.
 
fxsaber :
MIX의 TickSize는 25이고 Digits는 0입니다. 25의 배수가 아닌 정수 가격을 정규화하면 OrderSend 오류가 발생합니다.
글쎄, 그러한 논리로 0.25 단계의 경우 정규화는 오류를 줄 것입니다. 정규화의 작업은 가격을 일부 이국적인 가격 단계로 조정하는 것이 아니라 부동 소수점 숫자를 주어진 정밀도로 반올림하는 것 입니다. 오류가 발생하지 않습니다.
 
Sergei Vladimirov :
글쎄, 그러한 논리로 0.25 단계의 경우 정규화는 오류를 줄 것입니다. 정규화의 작업은 가격을 일부 이국적인 가격 단계로 조정하는 것이 아니라 부동 소수점 숫자를 주어진 정밀도로 반올림하는 것 입니다. 오류가 발생하지 않습니다.
정규화는 원래 하나(도움말에 언급됨) - 거래 기능에 대해서만 도입되었습니다.
 
Vladimir Batrudinov :

아마도 두 가지 함수를 도입해야 할 것입니다. 1 - 열거의 요소 수를 반환하고, 2 - 숫자별로 요소를 반환합니다.


enum에서는 예를 들어 아래와 같이 요소에 값을 할당할 수 있습니다. 열거형은 배열이 아닙니다.

 enum crazy
{
    e1 = 100500 ,
    e2 = - 200 ,
    e3 = - 100500 ,
    e4 = 0
};


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
{
     int z10 = e2;
     int z1 = e4;
  
}

C#과 같은 언어는 열거형 이름을 지정해야 하지만 C++ 및 따라서 MQL4/5는 열거형을 상당히 느슨하게 처리합니다. 만일을 대비하여 이 넌센스가 C++에서와 같이 MQL5에서 컴파일되는지 확인했습니다.

 
Alexey Volchanskiy :

enum에서는 예를 들어 아래와 같이 요소에 값을 할당할 수 있습니다. 열거형은 배열이 아닙니다.

그래서 무엇? 선언 순서대로 해당 요소를 반복하는 것이었습니다.
 
Alexey Navoykov :
그래서 무엇? 선언 순서대로 해당 요소를 반복하는 것이었습니다.
아, 글쎄요. 제가 생각하기에 가치로 질문을 잘못 읽었습니다.
 

프로그래머 참고 사항:

 #define ENUM_QQ             \
  ENUM_QQ_HELPER(el_1, 3 )   \
  ENUM_QQ_HELPER(el_2, 9 )   \
  ENUM_QQ_HELPER(el_3, 38 )  \
  ENUM_QQ_HELPER(el_4, 1 )   

enum Enum_qq
{
#define ENUM_QQ_HELPER(el, val) el = val,
  ENUM_QQ
#undef ENUM_QQ_HELPER
};

void get_enumqq_array( int &ar[])
{
   int temp[] = {
#define ENUM_QQ_HELPER(el, val) el,
  ENUM_QQ
#undef ENUM_QQ_HELPER
  };
   ArrayResize (ar, ArraySize (temp));
   for ( int i = 0 ;  i < ArraySize (temp);  ++i)
    ar[i] = temp[i];
}

void OnStart ()
{
   int q[];
  get_enumqq_array(q);
   for ( int i = 0 ;  i < ArraySize (q);  ++i)
     Alert (q[i]);
}


이제 열거를 편집해야 하는 경우 한 곳에서 한 번에 편집합니다. 예를 들어 element_new = 56과 같이 새 요소를 추가해야 합니다.

ENUM_QQ_HELPER(element_new , 56 )

get_enumqq_array() 함수 편집에 대해 걱정하지 마십시오. 이 기술을 X 매크로 https://en.wikipedia.org/wiki/X_Macro라고 합니다. 개발자의 요청에 따라 비슷한 방식으로 표준 열거를 쉽게 끝낼 수 있습니다.

즉시 명확하지 않을 수도 있지만 열거는 다음과 같이 나타났습니다.

 enum Enum_qq
{
   el_1 = 3
   el_2 = 9
   el_3 = 38
   el_4 = 1    
};
 
Vasiliy Sokolov :

열거형이 있다고 가정해 보겠습니다. 예를 들어 루프에서 이 열거형의 가능한 모든 값을 순차적으로 가져오는 방법은 무엇입니까?

저것들. tf1++는 일관되게 PERIOD_M1 , PERIOD_M2 , PERIOD_M5를 반환해야 합니다... 언어 도구를 사용하여 이 작업을 수행할 수 없다고 생각합니다.

시도하지는 않았지만 이론적으로 ENUM_MYENUM이 있는 경우 (ENUM_MYENUM)INT_MAX는 열거형에서 최대값을 제공해야 합니다. 그렇지 않으면 유형 캐스팅의 버그입니다. 캐스트 연산자(유형)가 이 유형 자체의 값을 반환 해야 하는 이유 때문에 컨텍스트에서 반드시 유효하지는 않지만 유형에 대해서는 유효합니다.