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

 
fxsaber :

정확히! 이제 f 모든 종류의 함수와 변수를 한 번에 호출할 수 있습니다. 무작위 오류가 발생하지 않도록 이러한 모호성에 대한 상식이 있어야 합니다 . 제 생각에는 실수로 다른 f를 가져와 정의했을 때 문제를 일으키는 것보다 typename f에서 빈 문자열을 발행하여 중단하는 것이 논리적입니다.

상식을 위해 모든 곳, 특히 버그 사이를 너무 열심히 찾아서는 안됩니다. 아니면 말을 잘 들어, MQL 버그는 전혀 버그가 아니라 현명한 개발자가 특별히 제공한 기능))

이미 언급했듯이 의심이 가는 경우 가장 먼저 할 일은 C ++에서 확인하고 여기서 더 나아가 춤을 추는 것입니다.

모호성에 관해서는 컴파일러 오류가 발생하고 문제가 없어야 합니다. 그리고 A100 예에서는 모든 것이 명확하고 모호하지 않았으므로 의미하는 바가 명확하지 않습니다. 함수를 오버로드해야 하는 경우 오버로드하고 모호한 위치에서 컴파일 오류 를 수정하면 됩니다.

 

MQL에서 템플릿 클래스 의 정적 멤버를 초기화하는 방법은 무엇입니까?

 template < typename T>
class xxx
{
   static int value;
};

template < typename T>
int xxx<T>::value = - 1 ;
 
Stanislav Korotky :

MQL에서 템플릿 클래스 의 정적 멤버를 초기화하는 방법은 무엇입니까?

문제라면 템플릿이 아닌 기본 클래스로 이동하고 상속하십시오. 그리고 일반적으로 x 방법.
 
Stanislav Korotky :

MQL에서 템플릿 클래스 의 정적 멤버를 초기화하는 방법은 무엇입니까?

 template < typename T>
int xxx::value = - 1 ;
 

A100 :

 template < typename T>
int xxx::value = - 1 ;

물론 일반적으로 이 방식은 C++에 해당하지 않지만 MQL에서는 동작한다.

클래스 외부로 메서드를 이동하는 것과 비슷한 문제가 있었습니다.

 template < typename T>
class A
{
 public :
   void f();
};

template < typename T>
void A<T>::f() { }   // 'A' - identifier already used

그러나 당신 덕분에 이제 해결책도 찾았습니다.

 template < typename T>
void A::f() { }
물론 이것도 틀렸지만 템플릿 클래스 메서드가 아니라 템플릿 메서드를 정의하는 것을 의미합니다. 그리고 둘 다 클래스에 있으면 모호성이 있습니다.
 
Alexey Navoykov :

클래스 외부로 메서드를 이동하는 것과 비슷한 문제가 있었습니다.

훨씬 더 편리합니다. 유일한 제한 사항은 (예제에서와 같이) 다른 클래스를 둘 사이에 끼울 수 없다는 것입니다.

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

오류, 버그, 질문

A100 , 2016.05.19 23:26

컴파일 오류

 template < typename T>
class A { public :
         bool operator ==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A< int > a;
};
template < typename T>
bool A:: operator ==( const A& )  { return false ; }
void OnStart ()
{
        A< int > a, b;
         Print ( a == b );
}
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.05.19
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Alexey Navoykov :

왜냐하면 템플릿 클래스 메서드가 아니라 템플릿 메서드를 정의하는 것을 의미합니다. 그리고 둘 다 클래스에 있으면 모호성이 있습니다.

그것은 일어나지 않을 것입니다-모든 것이 우리보다 먼저 생각됩니다. 템플릿 줄을 두 번 반복해야 합니다(위쪽 줄은 클래스, 아래쪽 줄은 메서드)
 
A100 :
그것은 일어나지 않을 것입니다-모든 것이 우리보다 먼저 생각됩니다. 템플릿 줄을 두 번 반복해야 합니다(위쪽 줄은 클래스를 참조하고 아래쪽 줄은 메서드를 나타냄).

젠장, 피펫이 얼마나 혼란스러워 보이는지.

A100 :
훨씬 더 편리합니다.

글쎄요, <T>를 넣을 필요가 없다는 것은 정말 큰 편리함입니다)

 
Alexey Navoykov :

글쎄, <T>를 넣을 필요가 없다는 것은 심각한 편리함이다)

그 메소드를 수업에서 빼낼 수 있다는 바로 그 기능이 편리하다는 뜻입니다.
 
Alexey Navoykov :

클래스 외부로 메서드를 이동하는 것과 비슷한 문제가 있었습니다.

물론 틀리기 때문에 템플릿 클래스 메서드가 아니라 템플릿 메서드를 정의하는 것을 의미합니다. 그리고 둘 다 클래스에 있으면 모호성이 있습니다.

메소드가 종종 클래스에서 제외된다는 것을 알았습니다. 그런데 왜? SB로 보이므로 "작은"메소드가 한 줄에 "긴"-외부에서 한 번에 정의됩니다. 인식의 편의성이 없기 때문에 ALT+G는 외부적으로 정의될 때 하나가 아닌 두 개의 점프 위치를 제공합니다. 그리고 과부하가 있으면 각각 2의 배수입니다. 그리고 ALT + M에서는 모든 것이 즉시 표시됩니다.

아마도 이것은 인터페이스 작업의 가시성에 대한 일종의 찬사이지만 지금까지는 영감을 받지 못했습니다.