OOP, modelli e macro in mql5, sottigliezze e usi - pagina 21

 

provato, ma non ha funzionato...

come posso fare una macro per sovrascrivere il parametro predefinito in una funzione richiamabile in un file incluso?

Ho il primo file, che è un "plugin":

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

CObj obj = new CObj();

Voglio collegare questo inluder, ma con la possibilità di sostituire il testo"127.0.0.1" con macro (se necessario)

Cioè ho bisogno di una definizione qui:

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

ma in modo che se non c'è questa definizione, allora host="127.0.0.1" funzionerà se c'è una definizionedefaulthost allora usatela

 
Igor Makanu:

se questa definizione manca, allora host="127.0.0.1" funzionerà sedefaulthost è presente, allora usatelo

#ifdef, #else, #endif.

 
fxsaber:

#ifdef, #else, #endif.

Lo so - queste sono le parole che sto cercando

Non riesco a capire cosa mettere tra le parentesi.

 
Igor Makanu:

So che è quello che sto cercando.

Non riesco a capire cosa mettere tra le parentesi.

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

Stessa cosa, ma più leggibile.

 
Vladimir Simakov:

Stessa cosa, ma più leggibile.

#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 questo è ancora più flessibile.

 

Grazie! Funziona!

ZS: si è confuso tra 2 file - aveva bisogno di ottenere una sostituzione macro funzionante in un file prima, poi sparsa tra i file ((

 

C'è una grande libreria per MT4 di un buon uomo che risolve molti dei problemi del quad in un modo molto originale. Scritto in stile fxsabera, non ha un cazzo di senso, ma funziona! Penso che lo troverete interessante.

Buona fortuna

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

c'è un modo per aggiungere un piccolo prefisso al nome della funzione usando un prefisso macro,

cioè ho questo codice nell'"inluder":

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

Voglio definire una macro nel "file principale" in modo che il codice di cui sopra diventi questo:

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

cioè sto cercando un modo per cambiare il nome di un gruppo di funzioni

 
Igor Makanu:

c'è un modo per far precedere il nome della funzione da un piccolo prefisso macro

#define  MACROS_PREFIX(A) FAST_##A

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