MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1096

 

Bir sınıf yöntemine bir işaretçi nasıl oluşturulur?

 class qer{
public :
int _int( int q){...}
int int_( int q){...}
};qer *_qer

Bir işlev işaretçisi _int ve int_ oluşturmanız gerekir.

mql4'te burada işaretçiler ve sınıflar hakkında bir şeyler açıklanmıştır ( https://docs.mql4.com/ru/basis/types/this , https://docs.mql4.com/ru/basis/types/object_pointers , https: //docs.mql4.com/ru/common/getpointer ) ancak yorum yok, ne için olduğu ve ne işe yaradığı belli değil. Sınıflar olmadan typedef kullanarak bir işaretçi bildirmek zor değil, ancak bunun sınıflarda nasıl çalıştığını anlamak istiyorum.

Bir sınıf işlevi için typedef uygulamaya çalışıyorum, bu işlev türünün henüz desteklenmediğine dair bir hata işaretçisi alıyorum, yukarıdaki talimatları denedim, ancak ne için gösterilmedi ve yorum yok, bana hiçbir şey olmadı.
 
Seric29 :

Bir sınıf yöntemine bir işaretçi nasıl oluşturulur?

Bir işlev işaretçisi _int ve int_ oluşturmanız gerekir.

mql4'te burada işaretçiler ve sınıflar hakkında bir şeyler açıklanmıştır ( https://docs.mql4.com/ru/basis/types/this , https://docs.mql4.com/ru/basis/types/object_pointers , https: //docs.mql4.com/ru/common/getpointer ) ancak yorum yok, ne için olduğu ve ne işe yaradığı belli değil. Sınıflar olmadan typedef kullanarak bir işaretçi bildirmek zor değil, ancak bunun sınıflarda nasıl çalıştığını anlamak istiyorum.

Bir sınıf işlevi için typedef uygulamaya çalışıyorum, bu işlev türünün henüz desteklenmediğine dair bir hata işaretçisi alıyorum, yukarıdaki talimatları denedim, ancak ne için gösterilmedi ve yorum yok, bana hiçbir şey olmadı.
Yasaktır
 
 
Bu değil. Bir kişinin bir mirasçıya atamaya değil, bir sınıf yöntemine bir işaretçiye ihtiyacı vardır.
 
Vladimir Simakov :
Bu değil. Bir kişinin bir mirasçıya atamaya değil, bir sınıf yöntemine bir işaretçiye ihtiyacı vardır.

başka seçenek yok - ya erişim kontrolü olmayan prosedür stili ya da erişim kontrolü ve türleri ile OOP

tamam, önemli değil yazarın her zaman son derece uzmanlaşmış sorunları vardır;)

 
Seric29 :

Bir sınıf yöntemine bir işaretçi nasıl oluşturulur?

Bir işlev işaretçisi _int ve int_ oluşturmanız gerekir.

mql4'te burada işaretçiler ve sınıflar hakkında bir şeyler açıklanmıştır ( https://docs.mql4.com/ru/basis/types/this , https://docs.mql4.com/ru/basis/types/object_pointers , https: //docs.mql4.com/ru/common/getpointer ) ancak yorum yok, ne için olduğu ve ne işe yaradığı belli değil. Sınıflar olmadan typedef kullanarak bir işaretçi bildirmek zor değil, ancak bunun sınıflarda nasıl çalıştığını anlamak istiyorum.

Bir sınıf işlevi için typedef uygulamaya çalışıyorum, bu işlev türünün henüz desteklenmediğine dair bir hata işaretçisi alıyorum, yukarıdaki talimatları denedim, ancak ne için gösterilmedi ve yorum yok, bana hiçbir şey olmadı.

Sadece merak ediyorum: nasıl kullanmayı planlıyorsunuz?

 

Neden tüm sınıfa bir işaretçi kaydetmeniz gerekiyor, burada bir örnek https://docs.mql4.com/ru/basis/types/this

 //+------------------------------------------------------------------+
//| возвращает собственный указатель                                 |
//+------------------------------------------------------------------+
CDemoClass *CDemoClass::getDemoClass( void )
  {
   return ( GetPointer ( this ));
  }

O zaman onunla ne yapmalı?

 
Vladimir Simakov :
Yasaktır

Soru, eğer bu yapılamıyorsa, o zaman neden fonksiyonları kabul eden sınıfta fonksiyonlar yazılıyor? Ayrıca bazen bir interface uygulamak gerekiyor ve bazen hangi fonksiyonu çağıracağınızı bilemiyorsunuz.

 
Seric29 :

Bu yapılamazsa, soru ortaya çıkar, o zaman neden fonksiyonlar kabul eden sınıfta fonksiyonlar yazılır ? Ayrıca bazen bir interface uygulamak gerekiyor ve bazen hangi fonksiyonu çağıracağınızı bilemiyorsunuz.

Neye benziyor?

 
Vladimir Simakov :

Neye benziyor?

İşlev işaretçisi parametre olarak iletilir. Sınıflarda kimsenin nasıl yapılacağını çözemediğini görüyorum. Ayrıca, verdiği sınıfa neden bir işaretçi döndürmeniz gerektiğini hala anlamıyorum.

İşte ilginç örnekler, ama bu benim sorum değil

 #property strict

class CStrategy;
typedef bool (*SignalFn)(CStrategy*);

// Global function definitions
bool IsBuySignal(CStrategy*ptr) { return ptr.IsBuySignal(); }
bool IsSellSignal(CStrategy*ptr) { return ptr.IsSellSignal(); }

// Create an abstract base class
class CStrategy
{
public :
         virtual bool IsBuySignal( void )= 0 ;
         virtual bool IsSellSignal( void )= 0 ;
};

// Derived class
class Strat1 : public CStrategy
{
public :
         // Implement the required functions
         bool IsBuySignal( void ) { return true ;}
         bool IsSellSignal( void ) { return true ;}
};

void OnStart ()
{
         // instantiate a class
        Strat1 strat1;

         // Global functions work as expected
        SignalFn ptrSignalFn;                           // pointer to a signal function
        ptrSignalFn = IsBuySignal;
         if ( ptrSignalFn(&strat1) ) { Print ( "Is Buy" ); }
}
Dizinde de benzer bir şey gördüm ama bu siteleri çoktan kapattım. ellerim ağrıyor ve iş yapılması gerekiyor.