ООП, шаблоны и макросы в 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){}
};

А так еще гибче.

 

Спасибо! работает!

ЗЫ: между 2-мя файлами запутался - нужно было сначала в одном файле добиться работоспособной макроподстановки, а потом разнести между файлами (((

 

Для МТ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));
   }
Причина обращения: