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

 
Alexey Navoykov :
그런데 일반적인 경우 함수의 반환값의 타입이 절대적으로 any이면 MQL 도구를 사용하여 작업을 해결할 수 없다는 결론에 이르렀습니다. 여기에 없는 decltype이 필요합니다.

포인터가 반환되지만 구조는 생각하지 않았습니다. 마찬가지로 링크가 있어야 합니다.

 
fxsaber :

그래서 같은

이제 일반적으로 3 대신 2개의 인수가 함수에 전달됩니다.

MacrosFunc(SelectHandle(Memory(A, false )), SelectHandle(Memory(A)) ? B : 0 )
 
Alexey Navoykov :

이제 일반적으로 3 대신 2개의 인수가 함수에 전달됩니다.

두 번째는 절대적으로 독창적인 작업입니다. 세 번째는 일반화입니다.

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

오류, 버그, 질문

fxsaber , 2018.12.21 22:15

나는 NewHandle이 상수일 수 있다는 것을 분명히 할 것입니다. 저것들. 유효한 전화
time = MACROS( 0 , TimeCurrent ()); // TimeCurrent из 0-хендла.
time = MACROS( 1 , TimeCurrent ()); // TimeCurrent из 1-хендла.

MACROS( 0 , SymbolInfoTick ( _Symbol , Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
Price = MACROS( 3 , Bid ); // Bid из 3-хендла.
예를 들어 매크로에 필요한 것이 분명한 것 같습니다.
 

물론 일반적으로 인수가 계산되는 순서에 의존하는 것은 모호한 작업입니다. C++ 표준에서 이 순서는 정의되어 있지 않으며 컴파일러에 달려 있습니다. MQL의 경우 이 순서가 변경될 수 있는지 또는 향후 변경할 계획인지 여부를 개발자와 명확히 해야 합니다.

따라서 이것은 더 나은 옵션입니다.

 template < typename T1, typename T2>
T2 MacrosFunc( const T1 handle, const T2 Value )
{
  SelectHandle(Memory(handle, false ));
   return (Value);
}

#define MACROS(A, B) MacrosFunc(A,  SelectHandle(Memory(A)) ? (B) : NULL )
 
Alexey Navoykov :

물론 일반적으로 인수 계산 순서에 의존하는 것은 모호한 작업입니다. C++ 표준에서 이 순서는 정의되어 있지 않으며 컴파일러에 달려 있습니다. MQL의 경우 이 순서가 변경될 수 있는지 또는 향후 변경할 계획인지 여부를 개발자와 명확히 해야 합니다.

따라서 이것은 더 나은 옵션입니다.

예, 더 신뢰할 수 있습니다.

 

짜증나, 친애하는 편집자.

이 코드를 해석하는 방법을 이해하지 못한 채 인터프리터에게 코드를 제공하려면... 높은 관계.

 

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

오류, 버그, 질문

fxsaber , 2018.12.21 10:23

도무지 알 수가 없네요 조언 부탁드립니다. 그런 시간이 있습니다

 int GetHandle() { return ( 0 ); }

bool SelectHandle( int ) { return ( true ); }
  
int NewHandle = 0 ;  
int PrevHandle = GetHandle();    

datetime time = SelectHandle(NewHandle) ? TimeCurrent () : 0 ;  
SelectHandle(PrevHandle);


동일한 작업을 수행하는 매크로를 작성하는 방법

time = MACROS(NewHandle, TimeCurrent ()); // Макрос


문제는 매크로에서 PrevHandle을 만들 수 없다는 것입니다.

내 솔루션이 더 나쁜 이유를 이해할 수 없습니다. 여기에 삽입하겠습니다.

 // handle_t MACROS_helper_PrevHandle;
int MACROS_helper_PrevHandle;
template < typename T>
T macros_helper_fn(T t)  {SelectHandle(MACROS_helper_PrevHandle); return t;}     
#define MACROS(NEW_HANDLE_, FN_)  ((MACROS_helper_PrevHandle=GetHandle())* 0 == 0 ?     \
                                    SelectHandle(NEW_HANDLE_) ? macros_helper_fn(FN_) : 0 : 0 )

주목할만한 점은 삼항 연산자를 통한 쉼표 연산자의 구현입니다.

명확하지 않습니다. 템플릿을 통해 핸들 유형을 드래그하는 이유는 무엇입니까? 실제로 다양한 유형의 핸들이 있을 수 있지만 그건 말도 안되는 소리입니다. 그리고 일반적인 경우 핸들 유형은 typedef/define을 통해 설정됩니다.

 
pavlick_ :

내 솔루션이 더 나쁜 이유를 이해할 수 없습니다. 여기에 삽입하겠습니다.

주목할만한 점은 삼항 연산자를 통한 쉼표 연산자의 구현입니다.

명확하지 않습니다. 템플릿을 통해 핸들 유형을 드래그하는 이유는 무엇입니까? 실제로 다양한 유형의 핸들이 있을 수 있지만 그건 말도 안되는 소리입니다. 그리고 일반적인 경우 핸들 유형은 typedef/define을 통해 설정됩니다.

모든 것이 나쁩니다. 핸들이란?

 
Алексей Тарабанов :

모든 것이 나쁩니다. 핸들이란?

작업의 조건은 작업이었습니다. 설명자(핸들)를 통해 변경되는 특정 환경이 있고 하나의 매크로에서 구현해야 합니다.

1. 현재 핸들 기억하기

2. 환경을 새 핸들로 전환

3. 환경에서 원하는 매개변수 가져오기

4. 환경을 이전 핸들로 전환

5. 반환 매개변수

 
pavlick_ :

작업의 조건은 작업이었습니다. 설명자(핸들)를 통해 변경되는 특정 환경이 있고 하나의 매크로에서 구현해야 합니다.

1. 현재 핸들 기억하기

2. 환경을 새 핸들로 전환

3. 환경에서 원하는 매개변수 가져오기

4. 환경을 이전 핸들로 전환

5. 반환 매개변수

답변 해주셔서 감사합니다.