OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 21

 

Denedim ama bir şey işe yaramadı...

Dahil edilen dosyada çağrılan fonksiyondaki varsayılan parametreyi değiştirmek için bir makro nasıl yapılır?

ilk dosyaya sahibiz - şunları içerir:

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

CObj obj = new CObj();

Bunu bağlamak istiyorum, ancak makro ikamelerini (gerekirse) "127.0.0.1" metniyle değiştirme yeteneği ile

onlar. Burada bir tür tanıma ihtiyacım var:

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

ancak bu tanımlama yoksa host="127.0.0.1" çalışacaktır, defaulthost tanımlaması varsa onu kullanırız.

 
Igor Makanu :

bu tanım mevcut değilse, o zaman host="127.0.0.1" çalışacaktır; bir defaulthost tanımı varsa, onu kullanın

#ifdef, #else, #endif.

 
fxsaber :

#ifdef, #else, #endif.

Bunun farkındayım - aradığımı kör etmek için bu kelimelerden hangisine ihtiyacım var?

Sonuna parantez içine ne koyayım anlamadım?

 
Igor Makanu :

Bunu biliyorum - aradığım şeyi kör etmek için bu kelimelerden hangisine ihtiyacım var?

Sonuna parantez içine ne koyayım anlamadım?

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

Aynı, ancak daha okunaklı.

 
Vladimir Simakov :

Aynı, ancak daha okunaklı.

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

Ve daha da esnek.

 

Teşekkür ederim! İşler!

Not: 2 dosya arasında kafam karıştı - önce bir dosyada uygulanabilir bir makro değişikliği elde etmek ve ardından dosyalar arasında yaymak gerekliydi (((

 

MT4 için, dördünün birçok sorununu çok özgün bir şekilde çözen, iyi bir insanın mükemmel bir kütüphanesi var. Fxsabera tarzında yazılmış, fena değil ama işe yarıyor! ilgileneceğinizi düşünüyorum.

İyi şanlar

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

makro değiştirme kullanarak işlev adına küçük bir önek eklemenin bir yolu var mı?

yani, "include" içinde bu kod var:

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

Yukarıdaki kodun şu hale gelmesi için "ana dosyada" bir makro tanımlamak istiyorum:

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

onlar. Bir grup işlevin adını değiştirmenin bir yolunu arıyorum

 
Igor Makanu :

makro değiştirme kullanarak işlev adına küçük bir önek eklemenin bir yolu var mı?

 #define MACROS_PREFIX(A) FAST_ ##A

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