OOP, Vorlagen und Makros in mql5, Feinheiten und Anwendungen - Seite 21

 

Ich habe es versucht, aber es hat nicht funktioniert...

Wie erstelle ich ein Makro, um den Standardparameter in einer aufrufbaren Funktion in einer eingeschlossenen Datei zu überschreiben?

Ich habe die erste Datei, die ein "Plugin" ist:

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

CObj obj = new CObj();

Ich möchte diesen Inluder anschließen, aber mit der Möglichkeit, den Text"127.0.0.1" durch Makros zu ersetzen (falls erforderlich)

d.h. ich brauche hier eine Definition:

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

aber so, dass, wenn es diese Definition nicht gibt, host="127.0.0.1" funktioniert, wenn es einedefaulthost-Definition gibt, verwenden Sie diese

 
Igor Makanu:

wenn diese Definition fehlt, funktioniert host="127.0.0.1", wenndefaulthost vorhanden ist, verwenden Sie es

#ifdef, #else, #endif.

 
fxsaber:

#ifdef, #else, #endif.

Das weiß ich - das sind die Worte, nach denen ich suche

Ich kann nicht herausfinden, was ich in die Klammern setzen soll.

 
Igor Makanu:

Ich weiß, dass es das ist, wonach ich suche.

Ich kann nicht herausfinden, was ich in die Klammern setzen soll.

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

Das ist dasselbe, aber besser lesbar.

 
Vladimir Simakov:

Das ist dasselbe, aber besser lesbar.

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

Und das ist sogar noch flexibler.

 

Ich danke Ihnen! Es funktioniert!

ZS: wurde zwischen 2 Dateien verwirrt - musste zuerst eine funktionierende Makro-Ersetzung in einer Datei bekommen, dann auf die anderen Dateien verteilt ((

 

Es gibt eine großartige Bibliothek für MT4 von einem guten Mann, der viele der Probleme des Quad auf sehr originelle Weise löst. Im fxsabera-Stil geschrieben, macht es zwar keinen Sinn, aber es funktioniert! Ich denke, Sie werden es interessant finden.

Viel Glück!

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

Gibt es eine Möglichkeit, dem Funktionsnamen ein kleines Präfix hinzuzufügen, indem ein Makro-Präfix verwendet wird?

d.h. ich habe diesen Code im "inluder":

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

Ich möchte ein Makro in der "Stammdatei" definieren, so dass der obige Code zu diesem wird:

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

d.h. ich suche nach einer Möglichkeit, den Namen einer Gruppe von Funktionen zu ändern

 
Igor Makanu:

Gibt es eine Möglichkeit, dem Funktionsnamen ein kleines Makropräfix voranzustellen?

#define  MACROS_PREFIX(A) FAST_##A

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