MQL5의 OOP에 대한 질문 - 페이지 60

 
Igor Makanu :

다시 안녕!


그러한 질문이 있습니까? enum , enum 배열이나 enum 목록 또는 enum 컨테이너가 필요합니다. 지금 7 enum 을 저장할 수 있지만 식욕이 증가하고 있으며 아마도 70 enum이 될 것입니다.


어디 ?

작업에 따라 배열과 목록, 컨테이너를 만들 수 있습니다. 내가 이해하는 한 대부분의 경우 코드 작성을 단순화해야 하며 열거형을 그룹으로 나누고 각 개체의 매개변수에 대한 구조로 결합할 수 있습니다.

실행 단계에 대해 이야기하는 경우 규범을 생각합니다. 값/매개변수를 설정할 때만 열거형을 사용하는 관행. 그리고 그것들을 저장하려면 간단한 기본 유형을 사용하십시오.

 
Aleksey Mavrin :

작업에 따라 배열과 목록, 컨테이너를 만들 수 있습니다. 내가 이해하는 한 대부분의 경우 코드 작성을 단순화해야 하며 열거형을 그룹으로 나누고 각 개체의 매개변수에 대한 구조로 결합할 수 있습니다.

실행 단계에 대해 이야기하는 경우 규범을 생각합니다. 값/매개변수를 설정할 때만 열거형을 사용하는 관행. 그리고 그것들을 저장하려면 간단한 기본 유형을 사용하십시오.

나는 처음에 그것을 했습니다. 어떤 이유로 나는 그것을 남겼습니다. 그러한 필드의 초기화에 문제가 있었던 것 같습니다. 다른 포함의 코드는 .... 이 옵션을 비틀 것입니다.


나는 인터넷을 돌아 다니며 Sharpovskoe와 같은 것을 원합니다 ... 일부 속성 (((

 public class COrder
    {
         public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
         public enum E_VOLUME { FIXED, INC, DEC }
         public E_MOTION OrderMotionType { get ; set ; }
         public E_VOLUME OrderVolumeType { get ; set ; }
    }

     class Program
    {
         static void Main( string [] args)
        {
             var current = new COrder { OrderMotionType = COrder.E_MOTION.HIGHER, OrderVolumeType = COrder.E_VOLUME.FIXED };
            
        }
    }
 
Igor Makanu :

나는 처음에 그것을 했습니다. 어떤 이유로 나는 그것을 남겼습니다. 그러한 필드의 초기화에 문제가 있었던 것 같습니다. 다른 포함의 코드는 .... 이 옵션을 비틀 것입니다.


나는 인터넷을 돌아 다니며 Sharpovskoe와 같은 것을 원합니다 ... 일부 속성 ((

뭐가 문제 야?

일대일인 경우:

 class COrder
{
public :
   enum E_MOTION { HIGHER, LOWER, ZIGZAG };
   enum E_VOLUME { FIXED, INC, DEC };
   E_MOTION orderMotionType;
   E_VOLUME orderVolumeType;
   COrder(E_MOTION _motion, E_VOLUME _volume):orderMotionType(_motion),orderVolumeType(_volume){}
};

void OnStart (){
   COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);
 } 

열거형을 전역 범위 로 전송하지 않으려는 경우입니다.

 
Vladimir Simakov :

열거형을 전역 범위 로 전송하지 않으려는 경우입니다.

흠...

그리고 나는 이것을 다음과 같이 할 수 없었습니다.

 COrder* current = new COrder(COrder ::HIGHER ,COrder ::FIXED );

고맙습니다!

 

누구든지 JSON에서 간단한 객체를 언로드하는 우아한 솔루션을 가지고 있습니까?

일반적으로 MQL에서 이러한 코드의 예가 다시 필요합니다.

 public class COrder
    {
         public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
         public enum E_VOLUME { FIXED, INC, DEC }

         public bool IsRunning { get ; set ; }
         public int OpenPrice { get ; set ; }
         public int ClosePrice { get ; set ; }
         public E_VOLUME OrderVolumeType { get ; set ; }
         public E_MOTION OrderMotionType { get ; set ; }
        
    }

     class Program
    {
         static void Main( string [] args)
        {
             var current = new COrder {
                IsRunning = false , 
                OpenPrice = 1200 ,
                ClosePrice = 1300 ,
                OrderMotionType = COrder.E_MOTION.ZIGZAG, 
                OrderVolumeType = COrder.E_VOLUME.FIXED };

             string json = JsonSerializer.Serialize<COrder>(current);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }

{"IsRunning":false,"OpenPrice":1200,"ClosePrice":1300,"OrderVolumeType":0,"OrderMotionType":2}

MQL용 직렬 변환기는 https://www.mql5.com/en/code/13663 입니다.

하지만 개체 필드의 올바른 우회 구조를 나타내지는 않습니다.

 
Igor Makanu :

하지만 개체 필드의 올바른 우회 구조를 나타내지는 않습니다.

매크로가 전부다
 
Alexey Navoykov :
매크로가 전부다

어... 물어볼게:

샘플을 도와주세요! 플리즈!

 
Igor Makanu :

어... 물어볼게:

샘플을 도와주세요! 플리즈!

글쎄, 질문이 구체적으로 필드 우회에 관한 것이라면 다음과 같습니다.

 #define SERIALIZE5(object, m1, m2, m3, m4, m5)   /* your code */

...

SERIALIZE5(current, IsRunning, OpenPrice, ClosePrice, OrderVolumeType, OrderMotionType);

그리고 당신은 매크로의 본문으로 그것을 알아낼 것입니다)

 
Alexey Navoykov :

글쎄, 질문이 구체적으로 필드 우회에 관한 것이라면 다음과 같습니다.

그리고 당신은 매크로의 본문으로 그것을 알아낼 것입니다)

좋아, 적어도 뭔가

고맙습니다!

 
반면에 직렬화의 경우 텍스트 필드 이름을 명시적으로 설정하는 것이 더 나을 수 있습니다. 저장된 파일이 작동을 멈출 염려 없이 나중에 코드에서 자유롭게 이름을 바꿀 수 있습니다.