불행히도 현재 MT4/MT5에서 함수 포인터 유형의 가능성은 매우 제한적이며 여러 가지 결함으로 인해 실용적이지 않습니다. #(MT5(빌드 2060)에서 수정되지 않음)"typedef 내에서 동일한 함수 서명을 재사용할 때 컴파일 오류". #(MT5(빌드 2060)에서 수정되지 않음)"typedef로 작업할 때 명시적 특수화와 함께 템플릿 함수를 사용하면 템플릿 함수 코드가 생성되지 않습니다."
네임스페이스의 예상되는 구현을 고려하여 결함 수정의 일부로 다음 C++ 유사한 동작 에 대한 지원을 구현할 가능성을 고려해 보시기 바랍니다.
//#include <iostream>template < typename T>
class A{
public :
typedefvoid (*callback)(T&); //class namespace for function pointer type
callback f_ptr;
T data;
};
template < typename T>
class B{
public :
typedefvoid (*callback)(T&); //class namespace for function pointer type
callback f_ptr;
};
template < typename T>
void func(T& value){
++value;
}
voidOnStart (){
//int main(){
A< int > a;
B< int > b;
a.f_ptr = func< int >; // automatic code generation of templates functions
b.f_ptr = a.f_ptr; // assignment operation for function pointers with the same function signatures and different function pointer types.int x = 1 ;
b.f_ptr(x);
printf ( "%d\r\n" , x); //2printf ( "%d\r\n" , b.f_ptr == a.f_ptr); //1 // equal operation for function pointers with the same function signatures and different function pointer types.
}
템플릿과 void* 중에서 어떻게 선택합니까?
직관 수준에서 스스로 선택하므로 특별한 접근 방식은 없습니다.
# (MT5(빌드 2060)에서 수정되지 않음) "typedef 내에서 동일한 함수 서명을 재사용할 때 컴파일 오류 ".
# (MT5(빌드 2060)에서 수정되지 않음) "typedef로 작업할 때 명시적 특수화와 함께 템플릿 함수를 사용하면 템플릿 함수 코드가 생성되지 않습니다."
네임스페이스의 예상되는 구현을 고려하여 결함 수정의 일부로 다음 C++ 유사한 동작 에 대한 지원을 구현할 가능성을 고려해 보시기 바랍니다.
여기요! 주제에 주목해주세요
https://www.mql5.com/ru/forum/314275
간단히 말해서 테스터는 기호 설정에 지정된 것과 일치하지 않는 여백을 계산합니다.거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MetaTrader 4 플랫폼 빌드 1170의 새 버전
fxsaber , 2019.05.28 12:10
MT4 컴파일러 버그입니까?MT5에서는 문제가 없습니다. MT4에서 함수를 오버로드하는 방법은 없습니다.
MT 5의 MT 4의 작은 사건이 확인되지 않았습니다 ...
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MetaTrader 4 플랫폼 빌드 1170의 새 버전
fxsaber , 2019.05.28 14:24
MT4와 MT5의 생소한 차이점을 발견했습니다. MT4 버그인가요?상위 5개에서 정적 초기화를 올바르게 수행했습니다. 첫 번째 액세스로.
그들은 4시에 그것을 하지 않았습니다. 그리고 우리는 우리가 언제 될지 모릅니다.
빌드 2062: 사용자 지정 기호를 만들 때 오류 5305가 발생했습니다.
2060년에는 모든 것이 정상입니다.
MT4에는 명령줄 스위치 /skipupdate가 있었던 걸로 기억합니다.
MT5에도 비슷한게 있나요? 업데이트를 비활성화하는 방법은 무엇입니까?
fxsaber :
MT4는 호출되고 MT5는 호출되지 않습니다.
오래된 컴파일러로 컴파일하는 것 같습니다. 최신으로 컴파일하면(MT5와 함께 제공됨) 모든 것이 잘 됩니다.
1966년까지 컴파일. MT4에서 2062년까지 시도 - 올바르게 작동합니다. 고맙습니다!
불행히도 그것은 승리하지 않을 것입니다 .