mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 21

 
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){}
};

しかも、これがさらにフレキシブル。

 

ありがとうございました。効果あり!

ZS: 2つのファイルの間で混乱した - まず1つのファイルで実行可能なマクロ置換を取得し、次にファイル間で分散させる必要があった ((

 

クアッドの多くの問題を非常にオリジナルな方法で解決している、優秀な人によるMT4用の素晴らしいライブラリが あります。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...
 

マクロプレフィックスを使用して関数名に小さなプレフィックスを追加する方法はありますか?

つまり、私はこのコードを "inluder "の中に持っています。

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));
   }
 
fxsaber:

ありがとうございました。

しかし、マクロをオーバーライドする方法がわかっていません。

以下はそのコードです。

#define  MACROS_PREFIX(A) FAST_##A

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

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

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

それは今では動作しますが、接頭辞FAST_で、私はMACROS_PREFIXをオーバーライドしたいですが、その接続(文字列 ホスト= "localhost",int ポート= 6379)が呼び出さ れたように

理由: