OOP, mql5의 템플릿 및 매크로, 미묘함 및 사용 기술 - 페이지 21

 

해봤는데 뭔가 안되네요...

포함된 파일에서 호출된 함수 의 기본 매개변수를 대체하기 위해 매크로를 만드는 방법은 무엇입니까?

우리는 첫 번째 파일을 가지고 있습니다 - 포함:

 class CObj{
public :
   CObj( string host= "127.0.0.1" ){}
};

CObj obj = new CObj();

이 포함을 연결하고 싶지만 매크로 대체(필요한 경우)를 "127.0.0.1" 텍스트로 바꿀 수 있는 기능이 있습니다.

저것들. 여기에 일종의 정의가 필요합니다.

 #define defaulthost "192.168.1.10"
#include "mylib.mqh"

그러나 이 정의가 없으면 host="127.0.0.1"이 작동하고 defaulthost 정의가 있으면 사용합니다.

 
Igor Makanu :

이 정의가 없으면 host="127.0.0.1"이 작동하고 defaulthost 정의가 있으면 사용하십시오.

#ifdef, #else, #endif.

 
fxsaber :

#ifdef, #else, #endif.

나는 이것을 알고 있습니다 - 이 단어들 중 내가 찾고 있는 것을 눈멀게 하는 데 필요한 것은 무엇입니까?

이해가 안 가는데 마지막에 괄호 안에 뭘 넣어야 할까요?

 
Igor Makanu :

나는 이것을 압니다 - 이 단어들 중 내가 찾고 있는 것을 눈멀게 하는 것이 필요합니다

이해가 안 가는데 마지막에 괄호 안에 뭘 넣어야 할까요?

 //#define defaulthost "192.168.0.1"

class CObj{
public :
   #ifdef defaulthost 
   CObj( string host=defaulthost){}
   #else // defaulthost 
   CObj( string host= "127.0.0.1" ){}
   #endif // defaulthost 
};

CObj obj = new CObj();
 
fxsaber :
 #ifndef DEFINE_HOST
   #define DEFINE_HOST "127.0.0.1"
#endif

class CObj{
public :
   CObj(DEFINE_HOST){}
};

동일하지만 더 읽기 쉽습니다.

 
Vladimir Simakov :

동일하지만 더 읽기 쉽습니다.

 #ifdef EXTERNAL_DEFINE_HOST
   #define DEFINE_HOST EXTERNAL_DEFINE_HOST
#else
   #define DEFINE_HOST "127.0.0.1"
#endif

class CObj{
public :
   CObj(DEFINE_HOST){}
};

그리고 훨씬 더 유연합니다.

 

고맙습니다! 공장!

추신: 두 파일 사이에 혼란이 생겼습니다. 먼저 하나의 파일에서 실행 가능한 매크로 대체를 달성한 다음 파일 간에 확산하는 것이 필요했습니다(((

 

MT4에는 매우 독창적인 방식으로 4명의 많은 문제를 해결하는 좋은 사람의 훌륭한 라이브러리 가 있습니다. fxsabera의 스타일로 작성되었으며, 전혀 문제가 되지 않지만 작동합니다! 나는 당신이 관심을 가질 것이라고 생각합니다.

행운을 빕니다

dingmaotu/mql4-lib
dingmaotu/mql4-lib
  • dingmaotu
  • github.com
MQL4/5 programming language provided by MetaQuotes is a very limited version of C++, and its standard library is a clone of the (ugly) MFC, both of which I am very uncomfortable with. Most MQL4 programs have not adapted to the MQL5 (Object Oriented) style yet, let alone reuable and elegant component based design and programming. mql4-lib is a...
 

매크로 대체를 사용하여 함수 이름에 작은 접두사를 추가하는 방법이 있습니까?

즉, "포함"에 다음 코드가 있습니다.

 bool Connect( string host = "localhost" , int port = 6379 )
   {
   return (connect(host, port));
   }

위의 코드가 다음과 같이 되도록 "메인 파일"에 매크로를 정의하고 싶습니다.

 bool Connect( string host = "localhost" , int port = 6379 )
   {
   return ( FAST_ connect(host, port));
   }

저것들. 기능 그룹의 이름을 변경하는 방법을 찾고 있습니다.

 
Igor Makanu :

매크로 대체를 사용하여 함수 이름에 작은 접두사를 추가하는 방법이 있습니까?

 #define MACROS_PREFIX(A) FAST_ ##A

bool Connect( string host = "localhost" , int port = 6379 )
   {
   return (MACROS_PREFIX(connect)(host, port));
   }