mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 38

 
fxsaber :

기본 기능(필요하지 않음)

  • StringToDouble
  • 문자열을 정수로
  • 문자열까지 시간
  • 문자열로 색상
  • 문자열 추가
  • 문자열 연결
  • 포인터 가져오기


왜요?
 
콘스탄틴 :
왜요?
모든 것은 적절한 운영자를 통해 수행됩니다.
 
fxsaber :
모든 것은 적절한 운영자를 통해 수행됩니다.

이해가 잘 안되는데 예를 들어
 
콘스탄틴 :

이해가 잘 안되는데 예를 들어

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2017.04.26 15:16

모든 표준 유형은 서로 캐스트됩니다.
 void OnStart ()
{
   string Str = "1.23qwedfg" ;
  
   Print (( int )Str);
   Print (( double )Str);
}

결과

 1
1.23

 
fxsaber :



오, 무슨 말을 하는 겁니까) 예, 이미 존재한다면 그대로 두십시오)) 그렇지 않으면 코드가 제거되고 코드가 구조에서와 같이 갑자기 작동을 멈춥니다. 알겠습니다. 최소한 합집합이 도입되었고 어떤 의미에서는 당신이 목발로 버틸 수 있음))
 
fxsaber :

기본 기능(필요하지 않음)

  • 포인터 가져오기

이 기능이 중복되나요?
 
바실리 푸쉬카요프 :
이 기능이 중복되나요?
& 개체
 

구조체 캐스팅 대신 공용체 사용

빌드 1596부터 서로 다른 유형의 구조를 명시적으로 캐스팅하는 것이 금지됩니다. 이전 빌드에서 작동하는 이 예제는 더 이상 컴파일되지 않습니다.

 struct struct_double
{
   double value ;
}sd;

struct struct_long
{
   ulong value ;
}sl;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   sl = (struct_long)sd;
}
cannot cast 'struct_double' to 'struct_long'    CastingValues.mq5       33      9

그러나 이제 MQL에서는 데이터를 통합 구조로 결합하는 것이 가능합니다. 덕분에 유니온을 통해 유형 캐스팅을 수행할 수 있습니다.

union struct_union
{
   double d_value;
   ulong   l_value;
}su;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   su.l_value = 0 ;
   su.d_value = 3.14159 ;
   printf (( string )su.l_value);
}
 2017.04 . 27 13 : 20 : 03.375 CastingValues (Si- 6.17 ,M1)       4614256650576692846

이 구조는 이미 새 빌드에서 사용할 수 있습니다.

ps 개발자는 캐스팅 섹션에서 문서 수정을 시작해야 합니다. https://www.mql5.com/en/docs/basis/types/casting

 
바실리 소콜로프 :

구조체 캐스팅 대신 공용체 사용

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: TypeToBytes

fxsaber , 2017.04.26 10:49

임의 구조의 주조가 가능합니다.
 struct STRUCT2
{
   MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
Union은 사용자 정의 생성자 및/또는 복사 연산자가 있는 구조에 대한 캐스팅을 허용하지 않습니다.
 
fxsaber :
Union은 사용자 정의 생성자 및/또는 복사 연산자가 있는 구조에 대한 캐스팅을 허용하지 않습니다.

유니온에 의한 캐스팅의 완전한 교체는 언급되지 않았습니다.

ps 귀하의 코드를 살펴보았습니다:

 class CASTING
  {
   public :
     template < typename T1>
     static const T Casting( const T1 &Value )
    {
   #ifdef TYPETOBYTES_FULL_SLOW
      T Data = { 0 };

       const int handle = :: FileOpen ( "Casting.tmp" , FILE_READ | FILE_WRITE | FILE_BIN );

       if (handle != INVALID_HANDLE )
      {
        :: FileWriteStruct (handle, Value);

        :: FileSeek (handle, 0 , SEEK_SET );
        :: FileReadStruct (handle, Data);

        :: FileClose (handle);
      }

       return (Data);
   #else // TYPETOBYTES_FULL_SLOW
      union CAST

바이너리 쓰기/읽기를 통한 임의 캐스팅... 불을 꺼라. 더 읽을 필요가 없습니다...