OOP, modelos e macros em mql5, sutilezas e usos - página 21

 

tentou, mas não funcionou...

como fazer uma macro para anular o parâmetro padrão em uma função que pode ser chamada em um arquivo inludido?

Eu tenho o primeiro arquivo, que é um "plugin":

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

CObj obj = new CObj();

Quero conectar este inluder, mas com a possibilidade de substituir o texto"127.0.0.1" por macros (se necessário)

ou seja, preciso de algumas definições aqui:

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

mas para que, se não houver essa definição, então host="127.0.0.1" funcionará se houver uma definição dedefault, então use-a

 
Igor Makanu:

se esta definição estiver faltando, então host="127.0.0.1" funcionará seo default estiver presente, então use-o

#ifdef, #else, #endif.

 
fxsaber:

#ifdef, #else, #endif.

Eu sei que - essas são as palavras que procuro

Não consigo descobrir o que colocar entre parênteses.

 
Igor Makanu:

Eu sei que é isso que estou procurando.

Não consigo descobrir o que colocar entre parênteses.

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

A mesma coisa, mas mais legível.

 
Vladimir Simakov:

A mesma coisa, mas mais legível.

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

E isto é ainda mais flexível.

 

Obrigado! Funciona!

ZS: ficou confuso entre 2 arquivos - necessário para obter uma substituição de macro funcional em um arquivo primeiro, depois espalhar entre os arquivos ((

 

Há uma grande biblioteca para o MT4 por um bom homem que resolve muitos dos problemas do quad de uma maneira muito original. Escrito em estilo fxsabera, não faz nenhum sentido, mas funciona! Acho que você vai achar interessante.

Boa sorte.

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...
 

há alguma forma de acrescentar um pequeno prefixo ao nome da função usando um prefixo macro,

ou seja, tenho este código no "inluder":

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

Eu quero definir uma macro no "arquivo mestre" para que o código acima se torne isto:

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

ou seja, estou procurando uma maneira de mudar o nome de um grupo de funções

 
Igor Makanu:

há alguma forma de prefixar o nome da função com um pequeno prefixo macro

#define  MACROS_PREFIX(A) FAST_##A

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