MT5에 대한 소원 - 페이지 103

 
A100 :

ME5는 컴파일할 때 오류를 생성하는데, 이는 제 생각에는 정당하지 않습니다.


공정한 지적 - 해보자.
 

실제로 RadioButtons에 해당하는 ENUM_XXX 형식의 미리 정의된 열거형에 1부터 번호가 매겨지기를 원하지만 지금은 기본적으로 번호가 매겨집니다. 0에서. 질문은 기본값을 변경하는 것이 아니라 변경하는 것이 아니라

 enum ENUM_ORDER_TYPE {
         ORDER_TYPE_BUY ,
         ORDER_TYPE_SELL , ...
};

그것은

 enum ENUM_ORDER_TYPE {
         ORDER_TYPE_BUY = 1 ,
         ORDER_TYPE_SELL , ...
};

근거는 다음과 같습니다 - 예:

 MqlTradeRequest request { ...
         ENUM_ORDER_TYPE      type; ...
}

코드 어딘가에서 request.type의 값을 분석할 때 0이면 초기화되지 않았는지 또는 초기화되었는지를 이해하는 것이 불가능합니다.

request.type = ORDER_TYPE_BUY;

이것은 RadioButton에 해당하는 ENUM_XXX와 같이 미리 정의된 열거형이 가장 많은 상황이며, 현재 상황에서 올바른 처리를 위해서는 코드의 부당한 복잡성 이 필요합니다.

 
불행히도 이것은 번호가 0부터 시작되는 다른 언어와의 호환성을 유지하기 때문에 불가능합니다.
 
Renat : 불행히도, 이것은 번호가 0부터 시작되는 다른 언어와의 호환성을 유지하기 때문에 불가능합니다.

그리고 미리 정의된 열거형의 첫 번째 구성원으로 특정 중립 식별자를 처방하지 못하게 하는 것은 무엇입니까? 예를 들어:

 enum ENUM_ORDER_TYPE 
  {
   ORDER_TYPE_ undefined ,
   ORDER_TYPE_BUY ,
   ORDER_TYPE_SELL , 
   ...
  };

"0부터 번호 매기기"를 유지하고 초기화되지 않은 변수를 쉽게 계산할 수 있습니다.

 
Yedelkin :

그리고 미리 정의된 열거형의 첫 번째 구성원으로 특정 중립 식별자를 처방하지 못하게 하는 것은 무엇입니까? 예를 들어:

그리고 나머지를 생각해보면 누가 이미 원래 열거형 세트를 사용하고 있습니까? 전체 서버 컴플렉스의 어리둥절한 모습은 말할 것도 없습니다.

일반적으로 질문이 잘못 제기되었습니다. 개발자는 게으르지 않고 이 세계의 자멸을 통해 나머지 세계가 스스로 적응하도록 강요해서는 안 됩니다.

 
Renat : 그리고 나머지를 생각해보면 누가 이미 원래 enum 집합을 사용하고 있습니까?

자, "나머지"에 대해 다시 생각해 봅시다. 명명된 상수 식별자가 도입된 이유는 무엇입니까? - 맞습니다. 동일한 식별자를 사용하기 위해서입니다. 또한 이러한 식별자를 사용하기 위해 열거형의 구성원에게 할당된 특정 값을 알 필요는 절대 없습니다. 아니면 유능한 프로그래머가 식별자를 사용하는 대신 열거형 멤버 의 기본값을 찾은 다음 이 기본값을 기반으로 검사를 수행한다고 가정합니까?

레나트 : 서버 콤플렉스 전체의 어리둥절한 표정은 말할 것도 없고요.

저것들. 내가 이해한 대로 제안 자체를 구현하는 것은 어렵지 않습니까?

Renat : 일반적으로 질문이 잘못 제기되었습니다. 개발자는 게으르지 않고 이 세계의 자멸을 통해 나머지 세계가 스스로 적응하도록 강요해서는 안 됩니다.

네, 사실 이 주제의 작가는 게으름 때문에 다른 사람의 세계를 파괴할 생각은 없었습니다. 그리고 개선을 위한 구체적인 제안을 했습니다. 그리고 그는 0 값이 오버로드되었다고 설명했습니다.

 

enum으로 명명된 요소의 이름에 대해 범위가 최소한 클래스임을 소개하고 싶습니다.

 void test1() { enum ENUM_1 { ELEM1 }; }
void test2() { enum ENUM_2 { ELEM1 }; } //ошибка

class A {
         enum ENUM_A { ELEM1 };
};
class B {
         enum ENUM_B { ELEM1 }; //ошибка
};

클래스에 대한 근거: 라이브러리(타사 포함) 및/또는 미리 정의된 라이브러리와 예기치 않게 충돌할 수 있는 고유한 이름을 제시해야 합니다. 또한, 열거형 SL, TP, PRICE 등의 요소에 대해 유사한 이름을 여러 클래스에서 동시에 사용할 수 있습니다. 갈등의 두려움 없이.

기능에 대한 근거: 중요하지 않지만 동시에

 
A100 :

enum 범위라는 이름의 요소 이름을 소개하고 싶습니다.

클래스에 대한 근거: 라이브러리 및/또는 미리 정의된 이름과 예기치 않게 충돌할 수 있는 고유한 이름이 필요합니다. 또한, 열거형 SL, TP, PRICE 등의 요소에 대해 유사한 이름을 여러 클래스에서 동시에 사용할 수 있습니다. 갈등의 두려움 없이.

기능에 대한 근거: 중요하지 않지만 동시에

C++에서는 어떻습니까?
 
sergeev :
C++에서는 어떻습니까?

거기에서 다리는 역설이지만 지금에서야 (제한이있을 때) 왜 그것이 모두 거기에서 이루어졌는지 이해하기 시작했습니다 :)

물론 그것 없이도 할 수 있습니다 - 모든 클래스에 대한 쓰기는 고유한 이름이지만 대규모 프로그램의 경우에는 더욱 그렇습니다.

 
A100 : ENUM_XXX 형식의 미리 정의된 열거형이 실제로 1부터 번호가 매겨진 RadioButton과 동일하기를 원하지만 이제는 기본적으로 번호가 매겨집니다. from 0. 질문은 기본값을 변경하는 것이 아니라 변경하는 것에 관한 것입니다 ...

이것을 시도하십시오("초기화"의 경우):

WRONG_VALUE

상수는 모든 열거형 유형으로 암시적으로 캐스팅될 수 있습니다 .

-하나