Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1096

 

Come si crea un puntatore aun metodo di classe?

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

Dovete creare un puntatore a una funzione_int eint_.

In mql4 viene descritto qualcosa sui puntatori e le classi qui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) ma non ci sono commenti, non è chiaro a cosa serva e cosa faccia. Senza classi è facile dichiarare un puntatore usando typedef, ma voglio capire come funziona nelle classi.

Cercando di applicare typedef a una funzione di classe si ottiene un errore il puntatore a questo tipo di funzione non è ancora supportato, provato le istruzioni di cui sopra, ma dal momento che non è mostrato per cosa e nessun commento, niente funziona.
 
Seric29:

Come si crea un puntatore aun metodo di classe?

Dovete creare un puntatore a una funzione_int eint_.

In mql4 viene descritto qualcosa sui puntatori e le classi qui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) ma non ci sono commenti, non è chiaro a cosa serva e cosa faccia. Senza classi è facile dichiarare un puntatore usando typedef, ma mi piacerebbe capire come funziona nelle classi.

Cercando di applicare typedef a una funzione di classe, l'errore puntatore a questo tipo di funzione non è ancora supportato, ho provato le istruzioni sopra ma dato che non è mostrato a cosa serve e nessun commento, non funziona nulla.
Non può
 
 
Sbagliato. Una persona ha bisogno di un puntatore a un metodo di una classe, non di una conversione discendente.
 
Vladimir Simakov:
Sbagliato. Una persona ha bisogno di un puntatore a un metodo di una classe, non di un cast a un erede.

non c'è altro - o stile procedurale senza controllo degli accessi o OOP con controllo degli accessi e dei tipi

ok, non importa, l'autore ha sempre problemi altamente specializzati ;)

 
Seric29:

Come si crea un puntatore aun metodo di classe?

Dovete creare un puntatore a una funzione_int eint_.

In mql4 viene descritto qualcosa sui puntatori e le classi qui(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) ma non ci sono commenti, non è chiaro a cosa serve e cosa fa. Senza classi è facile dichiarare un puntatore usando typedef, ma mi piacerebbe capire come funziona nelle classi.

Cercando di applicare typedef a una funzione di classe si ottiene un errore il puntatore a questo tipo di funzione non è ancora supportato, provato le istruzioni di cui sopra, ma dal momento che non è mostrato per cosa e nessun commento, niente funziona.

Mi chiedo solo: come pensate di usarlo?

 

Perché avete bisogno di salvare un puntatore all'intera classe, ecco un esempiohttps://docs.mql4.com/ru/basis/types/this

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

Cosa farne dopo?

 
Vladimir Simakov:
Non si può

La domanda sorge spontanea: se non puoi farlo, perché scrivi funzioni in una classe che prende funzioni? Inoltre, a volte è necessario implementare un'interfaccia e a volte non si sa quale funzione chiamare.

 
Seric29:

La domanda sorge spontanea: se non puoi farlo, perché scrivi funzioni in una classe che prende funzioni? Inoltre, a volte è necessario implementare un'interfaccia e a volte non si sa quale funzione chiamare.

Come funziona?

 
Vladimir Simakov:

Come funziona?

Un puntatore a una funzione viene passato come parametro. Vedo che nessuno ha capito come fare questo con le classi. Inoltre non capisco ancora perché un puntatore a una classe dovrebbe essere restituito.

Qui ci sono dei campioni interessanti ma non sono legati alla mia domanda.

#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"); }
}
Ho anche visto qualcosa di simile nella guida, ma ho già chiuso questi siti perché mi fanno male le mani e ho del lavoro da fare.