OOP, plantillas y macros en mql5, sutilezas y usos - página 21

 

lo intenté, pero no funcionó...

¿Cómo puedo hacer una macro para anular el parámetro por defecto en una función invocable en un archivo inluido?

Tengo el primer archivo, que es un "plugin":

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

CObj obj = new CObj();

Quiero conectar este inluder, pero con la posibilidad de sustituir el texto"127.0.0.1" con macros (si es necesario)

Es decir, necesito que me definan aquí:

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

pero si no hay esta definición, entonces host="127.0.0.1" funcionará si hay una definicióndefaulthost entonces úsela

 
Igor Makanu:

si falta esta definición, entonces host="127.0.0.1" funcionará sidefaulthost está presente, entonces úselo

#ifdef, #else, #endif.

 
fxsaber:

#ifdef, #else, #endif.

Lo sé - esas son las palabras que estoy buscando

No sé qué poner en los paréntesis.

 
Igor Makanu:

Sé que es lo que estoy buscando.

No sé qué poner en los paréntesis.

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

Lo mismo, pero más legible.

 
Vladimir Simakov:

Lo mismo, pero más legible.

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

Y esto es aún más flexible.

 

Gracias. ¡Funciona!

ZS: se confundió entre 2 archivos - necesitaba conseguir una sustitución de macros viable en un archivo primero, y luego repartirla entre los archivos ((

 

Hay una gran librería para MT4 de un buen hombre que resuelve muchos de los problemas del quad de una manera muy original. Escrito en estilo fxsabera, no tiene ni un puto sentido, ¡pero funciona! Creo que lo encontrará interesante.

Buena suerte

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

¿hay alguna forma de añadir un pequeño prefijo al nombre de la función utilizando un prefijo de macro?

es decir, tengo este código en el "inluder":

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

Quiero definir una macro en el "archivo maestro" para que el código anterior se convierta en esto:

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

es decir, estoy buscando alguna manera de cambiar el nombre de un grupo de funciones

 
Igor Makanu:

¿hay alguna forma de anteponer al nombre de la función un pequeño prefijo de macro

#define  MACROS_PREFIX(A) FAST_##A

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