OOP, templates et macros dans mql5, subtilités et utilisations - page 21

 

J'ai essayé, mais ça n'a pas marché...

comment faire une macro pour remplacer le paramètre par défaut dans une fonction appelable dans un fichier inclus ?

J'ai le premier fichier, qui est un "plugin" :

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

CObj obj = new CObj();

Je veux connecter cet inluder, mais avec la possibilité de remplacer le texte"127.0.0.1" par des macros (si nécessaire).

c'est-à-dire que j'ai besoin d'une définition ici :

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

mais de sorte que s'il n'y a pas cette définition, alors host="127.0.0.1" fonctionnera ; s'il y a une définitiondefaulthost, alors utilisez-la.

 
Igor Makanu:

si cette définition est manquante, alors host="127.0.0.1" fonctionnera sidefaulthost est présent, alors utilisez-le

#ifdef, #else, #endif.

 
fxsaber:

#ifdef, #else, #endif.

Je le sais. Ce sont les mots que je cherche.

Je n'arrive pas à trouver ce qu'il faut mettre entre parenthèses.

 
Igor Makanu:

Je sais que c'est ce que je cherche.

Je n'arrive pas à trouver ce qu'il faut mettre entre parenthèses.

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

Même chose, mais plus lisible.

 
Vladimir Simakov:

Même chose, mais plus lisible.

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

Et ceci est encore plus flexible.

 

Merci ! Ça marche !

ZS : confusion entre 2 fichiers - il fallait d'abord obtenir une macro de substitution utilisable dans un fichier, puis la répartir entre les fichiers ((

 

Il existe une excellente bibliothèque pour MT4, créée par un homme de qualité, qui résout de nombreux problèmes du quad de manière très originale. Ecrit dans le style fxsabera, ça n'a aucun sens, mais ça marche ! Je pense que vous trouverez cela intéressant.

Bonne chance

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

existe-t-il un moyen d'ajouter un petit préfixe au nom de la fonction en utilisant un préfixe de macro,

c'est-à-dire que j'ai ce code dans l'"inluder" :

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

Je veux définir une macro dans le "fichier maître" pour que le code ci-dessus devienne ceci :

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

Par exemple, je cherche un moyen de changer le nom d'un groupe de fonctions.

 
Igor Makanu:

existe-t-il un moyen de faire précéder le nom de la fonction d'un petit préfixe macro ?

#define  MACROS_PREFIX(A) FAST_##A

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