Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1096

 

¿Cómo puedo crear un puntero aun método de la clase?

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

Es necesario crear un puntero a una función_int eint_.

En mql4 se describe algo sobre punteros y clases aquí(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) pero no hay comentarios, no está claro para qué sirve y qué hace. Sin clases es fácil declarar un puntero usando typedef pero quiero entender cómo funciona en las clases.

Tratando de aplicar el typedef a una función de la clase obtiene un error puntero a este tipo de función no se admite todavía, trató de las instrucciones anteriores, pero ya que no se muestra por lo que y sin comentarios, nada funciona.
 
Seric29:

¿Cómo puedo crear un puntero aun método de la clase?

Es necesario crear un puntero a una función_int eint_.

En mql4 se describe algo sobre punteros y clases aquí(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) pero no hay comentarios, no está claro para qué sirve y qué hace. Sin clases es fácil declarar un puntero usando typedef, pero me gustaría entender cómo funciona en las clases.

Intentando aplicar el typedef a una función de clase, el error de puntero a este tipo de función no está soportado todavía, intenté las instrucciones de arriba pero como no se muestra para qué sirve y no hay comentarios, nada funciona.
No puedo
 
 
No es así. Una persona necesita un puntero a un método de la clase, no una conversión descendente.
 
Vladimir Simakov:
No es así. Una persona necesita un puntero a un método de una clase, no un reparto a un heredero.

no hay otra, ya sea el estilo procedimental sin control de acceso o la POO con control de acceso y de tipos

ok, no importa, el autor siempre tiene problemas muy especializados ;)

 
Seric29:

¿Cómo puedo crear un puntero aun método de la clase?

Es necesario crear un puntero a una función_int eint_.

En mql4 se describe algo sobre punteros y clases aquí(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) pero no hay comentarios, no está claro para qué sirve y qué hace. Sin clases es fácil declarar un puntero usando typedef, pero me gustaría entender cómo funciona en las clases.

Tratando de aplicar el typedef a una función de la clase obtiene un error puntero a este tipo de función no se admite todavía, trató de las instrucciones anteriores, pero ya que no se muestra por lo que y sin comentarios, nada funciona.

Sólo me preguntaba: ¿cómo piensa utilizarlo?

 

Por qué necesitas guardar un puntero a toda la clase, aquí tienes un ejemplohttps://docs.mql4.com/ru/basis/types/this

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

¿Qué hacer después?

 
Vladimir Simakov:
No se puede

La pregunta que surge es: si no puedes hacer eso, ¿por qué escribes funciones en una clase que toma funciones? Y además, a veces hay que implementar una interfaz y otras veces no se sabe a qué función llamar.

 
Seric29:

La pregunta que surge es: si no puedes hacer eso, ¿por qué escribes funciones en una clase que toma funciones? Y además, a veces hay que implementar una interfaz y otras veces no se sabe a qué función llamar.

¿Cómo funciona esto?

 
Vladimir Simakov:

¿Cómo funciona?

Se pasa un puntero a una función como parámetro. Veo que nadie ha descubierto cómo hacer esto con las clases. Tampoco me queda claro por qué hay que devolver un puntero a una clase.

Aquí hay muestras interesantes pero no están relacionadas con mi pregunta.

#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"); }
}
También he visto algo parecido en la guía, pero ya he cerrado esos sitios porque me duelen las manos y tengo trabajo.