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

 
이 주제와 관련이 없는 주석은 " OOP, 템플릿, mql5의 매크로, 미묘함 및 사용 기술 "로 이동되었습니다.
 

여기에 있었는지 없었는지 기억나지 않지만 누군가에게는 유용할 수 있습니다. 해당 속성에 의해서만 매개 변수화된 클래스의 메서드를 오버로드해야 하는 경우 값 또는 참조에 의해 동일한 형식의 인수를 사용합니다(구조는 참조에 의해서만 전달되고 단순 형식은 대부분 값에 의해 전달됨). 이것은 이러한 방식으로 수행할 수 있습니다(게다가 두 번째 템플릿은 & 없이 변형에 적용해야 합니다. 그렇지 않으면 구조에 의한 기본 타이핑이 컴파일되지 않습니다)

 template < typename T>
class A
 {
public :
  A* operator <<(T&p){ Print ( "<< &" , typename (T)); return & this ; }
   template < typename F>
  A* operator <<(F p){ Print ( "<< " , typename (F)); return & this ; }
 };

void OnStart ()
 {
     double ask= Ask ,bid= Bid ;
     MqlTick mt;
    A< double > a1;
    a1<< Ask << Bid <<ask;
    A< MqlTick > a2;
    a2<<mt; 
 }

토론 여기 .

 
Ilya Malev :

여기에 있었는지 없었는지 기억나지 않지만 누군가에게는 유용할 수 있습니다. 해당 속성에 의해서만 매개 변수화된 클래스의 메서드를 오버로드해야 하는 경우 값 또는 참조에 의해 동일한 형식의 인수를 사용합니다(구조는 참조에 의해서만 전달되고 단순 형식은 대부분 값에 의해 전달됨). 이것은 이러한 방식으로 수행할 수 있습니다(게다가 두 번째 템플릿은 & 없이 변형에 적용해야 합니다. 그렇지 않으면 구조에 의한 기본 타이핑이 컴파일되지 않습니다)

그런 다음 구조 유형을 위한 클래스는 모든 숫자 유형을 허용할 수 있습니다. 그리고 어떻게 해야 할까요?

 
Alexey Navoykov :

그런 다음 구조 유형을 위한 클래스는 모든 숫자 유형을 허용할 수 있습니다. 그리고 어떻게 해야 할까요?

이 경우 클래스는 구조와 단순 유형 모두에 대해 혼합 유형을 위한 것입니다. 그렇지 않으면 이 구성이 의미가 없습니다. F에서 불필요한 유형을 허용하지 않기 위해 typename(F), sizeof(F) 등에 대한 검사를 작성할 수 있습니다.

 
Ilya Malev :

이 경우 클래스는 구조와 단순 유형 모두에 대해 혼합 유형을 위한 것입니다. 그렇지 않으면 이 구성이 의미가 없습니다. F에서 불필요한 유형을 허용하지 않기 위해 typename(F), sizeof(F) 등에 대한 검사를 작성할 수 있습니다.

typename은 불필요한 유형을 수신하는 것을 방지하지 않습니다.) 이렇게 하려면 적절한 유형으로 오버로드된 private 메소드를 만들어야 합니다.

그리고 클래스가 모든 유형을 위한 것이라면 템플릿 매개변수를 사용하여 클래스를 매개변수화하여 혼란을 야기하는 이유는 무엇입니까? 목발만 있으면 이런 용도로 사용할 수 있습니다. 목발에 대한 더 간단한 옵션이 있지만 템플릿 클래스가 없습니다.

 
Alexey Navoykov :

클래스가 모든 유형을 위한 것이라면 템플릿 매개변수로 클래스를 매개변수화하여 혼란을 야기하는 이유는 무엇입니까?

그러면 매개변수화 없이 원하는 유형(무엇이든 될 수 있음)을 어떻게 수락합니까? 유형을 지정하지 않고 매개변수 또는 필드를 선언할 수 없습니다. 예를 들어, 임의의 데이터 유형 에 대한 "래퍼" 클래스가 될 수 있습니다.

알렉세이 나보이코프 :

typename은 불필요한 유형을 허용하지 않도록 보호하지 않습니다)

typename(F)==typename(T)이라고 쓰면 보호됩니다.

 
Ilya Malev :

그러면 매개변수화 없이 원하는 유형(무엇이든 될 수 있음)을 어떻게 수락합니까? 유형을 지정하지 않고 매개변수 또는 필드를 선언할 수 없습니다. 예를 들어, 임의의 데이터 유형 에 대한 "래퍼" 클래스가 될 수 있습니다.

글쎄요, 그것은 단지 클래스 A입니다. 매개변수가 클래스의 동작과 아무 관련이 없는데 템플릿을 선언하는 이유는 무엇입니까?

일리야 말레프 :

typename(F)==typename(T)를 쓰면 보호됩니다.

이것은 절대적으로 작습니다. 유형 제어를 런타임으로 이동... 코드는 몇 년 후에 디버깅해야 합니다.

 
말해 주세요. 5에 대한 일반적인 후행 정지점을 어디에서 볼 수 있습니까?
 
Nikita Chernyshov :
말해 주세요. 5에 대한 일반적인 후행 정지점을 어디에서 볼 수 있습니까?

iSAR iOsMA EA - 후행

 
Vladimir Karputov :

iSAR iOsMA EA - 후행

고맙습니다!

사유: