Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1096

 

Comment créer un pointeur versune méthode de classe?

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

Vous devez créer un pointeur vers une fonction_int etint_.

Dans mql4 quelque chose est décrit à propos des pointeurs et des classes ici(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) mais il n'y a pas de commentaires, on ne sait pas clairement à quoi cela sert et ce que cela fait. Sans classes, il est facile de déclarer un pointeur en utilisant le typedef mais je veux comprendre comment cela fonctionne dans les classes.

En essayant d'appliquer typedef à une fonction de classe, on obtient une erreur pointer vers ce type de fonction n'est pas encore supporté, j'ai essayé les instructions ci-dessus mais comme ce n'est pas indiqué pour quoi et pas de commentaires, rien ne fonctionne.
 
Seric29:

Comment créer un pointeur versune méthode de classe?

Vous devez créer un pointeur vers une fonction_int etint_.

Dans mql4 quelque chose est décrit à propos des pointeurs et des classes ici(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) mais il n'y a pas de commentaires, on ne sait pas clairement à quoi cela sert et ce que cela fait. Sans classes, il est facile de déclarer un pointeur en utilisant le typedef, mais j'aimerais comprendre comment cela fonctionne dans les classes.

J'essaie d'appliquer le typedef à une fonction de classe, erreur pointeur vers ce type de fonction n'est pas encore supporté, j'ai essayé les instructions ci-dessus mais comme il n'est pas indiqué à quoi ça sert et qu'il n'y a pas de commentaires, rien ne fonctionne.
Je ne peux pas.
 
 
Faux. Une personne a besoin d'un pointeur vers une méthode d'une classe, pas d'une conversion descendante.
 
Vladimir Simakov:
Faux. Une personne a besoin d'un pointeur vers une méthode d'une classe, pas d'un cast vers un héritier.

il n'y a pas d'autre solution - soit le style procédural sans contrôle d'accès, soit la POO avec contrôle d'accès et de type.

ok, ça ne fait rien, l'auteur a toujours des problèmes hautement spécialisés ;)

 
Seric29:

Comment créer un pointeur versune méthode de classe?

Vous devez créer un pointeur vers une fonction_int etint_.

Dans mql4 quelque chose est décrit à propos des pointeurs et des classes ici(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer) mais il n'y a pas de commentaires, on ne sait pas clairement à quoi cela sert et ce que cela fait. Sans classes, il est facile de déclarer un pointeur en utilisant le typedef, mais j'aimerais comprendre comment cela fonctionne dans les classes.

En essayant d'appliquer typedef à une fonction de classe, on obtient une erreur pointer vers ce type de fonction n'est pas encore supporté, j'ai essayé les instructions ci-dessus mais comme ce n'est pas indiqué pour quoi et pas de commentaires, rien ne fonctionne.

Je me demande simplement : comment comptez-vous l'utiliser ?

 

Pourquoi avez-vous besoin de sauvegarder un pointeur vers la classe entière, voici un exemplehttps://docs.mql4.com/ru/basis/types/this.

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

Qu'en faire après ?

 
Vladimir Simakov:
Vous ne pouvez pas

La question se pose : si vous ne pouvez pas faire cela, pourquoi écrire des fonctions dans une classe qui prend des fonctions ? De plus, il arrive que l'on doive implémenter une interface et que l'on ne sache pas quelle fonction appeler.

 
Seric29:

La question se pose : si vous ne pouvez pas faire cela, pourquoi écrire des fonctions dans une classe qui prend des fonctions? De plus, il arrive que l'on doive implémenter une interface et que l'on ne sache pas quelle fonction appeler.

Comment cela fonctionne-t-il ?

 
Vladimir Simakov:

Comment cela fonctionne-t-il ?

Un pointeur vers une fonction est passé comme paramètre. Je vois que personne n'a trouvé comment faire cela avec les classes. Je ne comprends toujours pas pourquoi il faut renvoyer un pointeur vers une classe.

Voici des échantillons intéressants mais qui n'ont rien à voir avec ma question.

#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"); }
}
J'ai également vu quelque chose de similaire dans le guide, mais j'ai déjà fermé ces sites car j'ai mal aux mains et j'ai du travail à faire.
Raison: