오류, 버그, 질문 - 페이지 2473

 
Sergey Dzyublik :


현재 템플릿 클래스 내부에 선언된 정적 변수 를 사용할 수 없습니다.
네임스페이스의 도입으로 이 제한을 우회할 수 있습니까?

그래 넌 할수있어.

코드는 약간 다르고 더 정확합니다. 예는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                  ScopeSample.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
class A
  {
public :
   struct Item
     {
      T                 value;
      
      Item(T initial= 10 ):value(initial) { Print ( __FUNCSIG__ ); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
class B
  {
public :
   struct Item
     {
      T                 value;
      
      Item(T initial= 100 ):value(initial) { Print ( __FUNCSIG__ ); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
A::Item A::s_default;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template < typename T>
B::Item B::s_default;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   Print (A< int >::s_default.value);
   Print (B< int >::s_default.value);
  }
//+------------------------------------------------------------------+


결과:

 2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) A< int >::Item::Item( int )
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) B< int >::Item::Item( int )
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) 10
2019.05 . 24 17 : 16 : 20.225 ScopeSample (EURUSD,H1) 100
 
정말 감사합니다.
네임스페이스 지원으로 MT에 대한 알파 액세스를 얻을 수 있습니까?
연구의 일환으로 버그/취약점 등을 검색하는 것이 아니라 "스마트 컨테이너"를 작성하는 것이 정말 필요합니다.
 

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

오류, 버그, 질문

Sergey Dzyublik , 2019.05.23 13:52

최근에 MT 작업 및 버그의 12가지 "기능"에 대한 정보가 제공되었습니다.
수정해야 하는지 여부를 어떻게 알 수 있습니까?
새 빌드가 릴리스될 때마다 모든 것을 테스트하겠다고 제안하지 마십시오.

(MT5(빌드 2059)에서 수정되지 않음) "파라미터(void*)(NULL)를 템플릿 함수에 전달할 때 컴파일 오류"".
(MT5(빌드 2059)에서 수정) "전략 테스터: 계획된 2개의 패스, 그러나 실제로 "OnInit 치명적 오류" 오류로 인해 패스의 무한 수 > 900pcs".
(MT5(빌드 2059)에서 수정되지 않음) "동적 배열이 있는 구조에 대한 기본 할당 연산자 작업의 일부로 배열 크기 필드의 값이 잘못되었습니다."
(MT5(build 2059)에서 수정되지 않음) "함수에서 값으로 클래스 개체를 반환할 때 컴파일러는 기본 클래스 복사 생성자를 보지 않습니다."
(MT5(빌드 2059)에서 수정됨) "템플릿 클래스 및 "복잡한" 구조에 대해 "자체로" 유형 캐스트를 수행할 때 컴파일 오류가 발생합니다."
(MT5(build 2059)에서 수정되지 않음) "typedef로 작업할 때 명시적으로 특수화된 템플릿 함수를 사용하면 템플릿 함수 코드가 생성되지 않습니다."
(MT5(빌드 2059)에서 수정되지 않음) "typedef 내에서 동일한 함수 서명을 재사용할 때 컴파일 오류 ".
(MT5(빌드 2059)에서 수정되지 않음) "많은 문자열 조작 함수가 문자열의 NULL 문자에서 작동하지 않습니다(예: ShortArrayToString, StringInit, StringFill)".
(MT5(build 2059)에서 수정되지 않음) "StringSetLength 함수는 문자열의 길이를 "자르는" 방향으로만 작동하지만 늘리지는 않습니다."
  (MT5(빌드 2057)에서 수정됨) "전략 테스터: 750 "metatester64.exe" 프로세스 시작".
"포럼 www.mql5.com, 사진이 있는 메시지 편집 시, 이전 사진은 새 사진으로 교체되지 않습니다."


제안:
"기본적으로 할당 연산자(복사 생성자)에 대한 코드 생성/제거를 강제할 수 있는 기능을 사용자에게 제공합니다."
"구조가 모든 유형의 개체에 대한 전체 복사 기능을 제공하는 것처럼 ArrayCopy 함수가 클래스 및 "복잡한" 구조를 복사하도록 허용합니다."
"동적 어레이로 작업할 때 사용자에게 용량 값을 읽고 설정할 수 있는 기능 제공"

""시그널" 서비스의 인포그래픽 개선을 위한 변경 사항"


 

오늘은 선물시장의 실계좌 인 오크리티에 브로커의 틱 히스토리가 제 단말에 다운이 되지 않습니다.

유리의 데이터가 변경됩니다.

지금 24.05.2019 23:40

터미널의 마지막 눈금은 2019년 5월 23일입니다.


상황은 내가 직접 거래한 것을 포함하여 일부 다른 상품에서도 동일합니다.

두 번째 단말(별도 설치)에서는 동일한 브로커의 다른 계정에서도 효과는 동일합니다.

 
Expert Advisor가 최적화 또는 단일 테스트 모드 에서 작동하는지 여부를 결정할 수 있습니까?
 
MT5(빌드 2059)
템플릿 함수에 매개변수(void*)(NULL)를 전달할 때 컴파일 오류:
 class C{
public :
   template < typename T>
   static void func(T ){
       Print ( __FUNCSIG__ );
   }
};


void OnStart (){  
   void * c_ptr = new C();
   
   C::func((C*) NULL );     // Ok
   C::func(c_ptr);        // Ok
   C::func(( void *) NULL );   // 'void' - illegal use of 'void' type
   
   delete c_ptr;
}
모든 것이 작동했습니다(빌드 2057). 수정 사항의 일부로 문제가 발생했을 수 있습니다.
그리고   "템플릿 클래스 및 "복잡한" 구조에 대해 "self-to-self" 유형 캐스트를 수행할 때 컴파일 오류가 발생합니다."
 
아마도 C++와 유사하게 "전체" 널 포인터를 도입하는 것이 합리적일 것입니다. - nullptr ?
 

빌드 2056에서는 모든 것이 잘 작동했습니다. 그리고 2059년 - 이미 컴파일 오류:

 void OnStart ()
{
class A {};
//#define void  A //(*)
         const void *p1;
               void *p2 = ( void *)p1; //Error: 'void' - class type expected
}

void가 A(*)로 바뀌면 모든 것이 정상입니다. 차이점이 뭐야?

또한 다음과 같은 경우에도 컴파일 오류가 발생합니다.

              void *p2 = ( void *)p1; //Error: 'void' - class type expected
 

명령 빌드 2059x32에서 컴파일할 때 추상 오류:

하지만 IDE를 통해 재생산되지 않습니다 - 아마도 사고

 
A100 :

템플릿과 void* 중에서 어떻게 선택합니까?