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

 
A100 :
차이가 크면 두 버전이 C++에서 정상적으로 컴파일되는 이유는 무엇입니까?

이것은 이 경우에 C++의 권한이 전혀 아니기 때문입니다. 논리에 근거한 결론. 위에서 나는 인쇄물로 예제를 다시 수정했습니다.

변경만 하면 됩니다

 // typedef void (*fn)();
typedef void (*fn123)();

인쇄 방법이 완전히 다릅니다. 컴파일러에게 "바보보다 똑똑"하고 C++처럼 행동하도록 요청할 수 있습니다. 그러나 이것은 사실 논란의 여지가 있는 결정입니다.

저것들. 이러한 "도움말"은 컴파일러에서 구현할 수 있지만 접근 방식의 차이를 보여주었습니다.

 
A100 :
좋아. 차이점이 뭐야?

분명히 컴파일러에 대한 간단한 전송으로 f는 함수 포인터로 인식되지 않습니다.

 
Комбинатор :

분명히 컴파일러에 대한 간단한 전송으로 f는 함수 포인터로 인식되지 않습니다.

동의합니다(모든 것이 간단하고 실제로 차이가 없습니다)
 
Комбинатор :

분명히 컴파일러에 대한 간단한 전송으로 f는 함수 포인터로 인식되지 않습니다.

그리고 그렇게 해서는 안 된다. 단지 모호성 때문에

 typedef void (*fn)();

template < typename T>
void g( T Value ) { Print ( typename (Value)); }
void f() {}

void g( fn Value ) { Print ( typename (Value)); }
void OnStart ()
{
  g( f ); // void(*fn)()

   int f = 0 ;  
  g( f ); // int
}
 
fxsaber :

그리고 그렇게 해서는 안 된다. 단지 모호성 때문에

원래 예에서는 그런 모호함이 없었습니다 ... 직접 만들었습니다 ... 모든 것을 설명했습니다.
 
fxsaber :

그리고 그렇게 해서는 안 된다. 단지 모호성 때문에

원본에서 typedef는 다른 유형이 아닌 유형의 별칭이므로 개발자에게 정말 큰 질문은 유형 이름이 유형이 아니라 별칭을 표시하는 이유입니다.
 

컴파일 중 오류

 struct A {
                 void f() {}
         static    void f( int ) {}
};
template < typename T>
void g( T ) {}
void f( int ) {}
typedef void (*fn)( int );
void OnStart ()
{
        g(  (fn)   f ); //(1) нормально
        g(  (fn)A::f ); //(2) error: '(void(*fn)(int))' - cannot resolve function address
        fn ff = A::f;
        g( ff        ); //(3) нормально
}

(1)이 정상이면 (3)이 정상이면 (2)에 오류가 있는 이유는???
 
Комбинатор :
원본에서 typedef는 다른 유형이 아닌 유형의 별칭이므로 실제로 개발자에게 가장 큰 질문은 유형 이름이 유형이 아니라 별칭을 표시하는 이유입니다.

동의한다.

 

A100 :

 template < typename T>
string typeof ( T ) { return typename T; }

typeof를 명확히 해주세요. 검색은 숙련된 프로그래머가 아닌 정상적인 설명을 찾지 못했습니다.

 
단일 실행 및 시각화 동안 로그는 이러한 종류의 수천 개의 항목으로 채워집니다.
 2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order modified [ # 253 buy limit 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    take profit triggered # 251 sell 1.00 EURUSD 1.18166 tp: 1.18159 [ # 254 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    deal # 251 buy 1.00 EURUSD at 1.18159 done (based on order # 254 )
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    deal performed [ # 251 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order performed buy 1.00 at 1.18159 [ # 254 buy 1.00 EURUSD at 1.18159 ]
2017.08 . 16 20 : 26 : 06.477 2017.08 . 01 10 : 04 : 06    order [ # 253 buy limit 1.00 EURUSD at 1.18159 ] triggered

그리고 그들이 나올 때까지 몇 초를 기다려야합니다. 그리고 로그에서 저는 OnDeinit에서 직접 하는 저널에 인쇄하는 데만 관심이 있습니다. 매우 드문 경우에 읽히는 이러한 로그를 매번 부과하는 이유는 무엇입니까? 또한 메뉴에는 에이전트 로그를 볼 수 있는 별도의 항목이 있습니다. 그리고 동일한 최적화로 이러한 로그가 없다고 해서 열등감을 느끼는 사람은 없습니다. 그렇다면 왜 수백 메가바이트에 집착 하는가?

테스터에서 커틀릿에서 파리를 분리할 수 있습니까? 터미널에서와 같이: EA 자체 및 터미널 로그의 인쇄에 대한 로그. 각 Order 묶음에 대한 로그에 있는 이러한 수만 개의 불필요한 메시지가 통과하고 백테스트 완료의 마지막 줄을 볼 수 있을 때까지 긴 초를 기다리는 데 지쳤습니다.

정말 오랜만에 마음이 아팠습니다. 나를 괴롭히는 사람은 나뿐만이 아닐 수도 있습니다.