mql5中的OOP、模板和宏,细微之处和用途 - 页 21

 

试过了,但没有用......。

如何制作一个宏来覆盖一个内嵌文件中的可调用函数 的默认参数?

我有第一个文件,它是一个 "插件"。

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

CObj obj = new CObj();

我想连接这个inluder,但有可能用宏代替"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){}
};

而这一点甚至更为灵活。

 

谢谢你!它是有效的!

ZS:在2个文件之间混淆了--需要先在一个文件中获得一个可行的宏替代,然后在文件之间分散开来()

 

有一个很好的人为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));
   }
原因: