Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1096

 

Wie kann ich einen Zeiger aufeine Klassenmethode erstellen?

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

Sie müssen einen Zeiger auf eine_int undint_ Funktion erstellen.

In mql4 wird hier etwas über Zeiger und Klassen beschrieben(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), aber es gibt keine Kommentare, es ist nicht klar, wofür es ist und was es tut. Ohne Klassen ist es einfach, einen Zeiger mit typedef zu deklarieren, aber ich möchte verstehen, wie es in Klassen funktioniert.

Der Versuch, typedef auf eine Klasse Funktion anwenden bekommt einen Fehler Zeiger auf diesen Funktionstyp wird noch nicht unterstützt, versuchte die Anweisungen oben, aber da es nicht für was und keine Kommentare angezeigt wird, nichts funktioniert.
 
Seric29:

Wie kann ich einen Zeiger aufeine Klassenmethode erstellen?

Sie müssen einen Zeiger auf eine_int undint_ Funktion erstellen.

In mql4 wird hier etwas über Zeiger und Klassen beschrieben(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), aber es gibt keine Kommentare, es ist nicht klar, wofür es ist und was es tut. Ohne Klassen ist es einfach, einen Zeiger mit typedef zu deklarieren, aber ich würde gerne verstehen, wie es in Klassen funktioniert.

Versucht, typedef auf eine Klassenfunktion anzuwenden, Fehler Zeiger auf diesen Funktionstyp wird noch nicht unterstützt, versuchte die Anweisungen oben, aber da es nicht angezeigt wird, was es für und keine Kommentare, nichts funktioniert.
Kann nicht
 
 
Falsch. Eine Person benötigt einen Zeiger auf eine Methode einer Klasse, nicht eine Konvertierung von Nachkommen.
 
Vladimir Simakov:
Falsch. Eine Person benötigt einen Zeiger auf eine Methode einer Klasse, nicht einen Cast auf einen Erben.

es gibt keine andere Möglichkeit - entweder prozeduraler Stil ohne Zugriffskontrolle oder OOP mit Zugriffs- und Typkontrolle

ok, macht nichts, der Autor hat immer hochspezialisierte Probleme ;)

 
Seric29:

Wie kann ich einen Zeiger aufeine Klassenmethode erstellen?

Sie müssen einen Zeiger auf eine_int undint_ Funktion erstellen.

In mql4 wird hier etwas über Zeiger und Klassen beschrieben(https://docs.mql4.com/ru/basis/types/this,https://docs.mql4.com/ru/basis/types/object_pointers,https://docs.mql4.com/ru/common/getpointer), aber es gibt keine Kommentare, es ist nicht klar, wofür es ist und was es tut. Ohne Klassen ist es einfach, einen Zeiger mit typedef zu deklarieren, aber ich würde gerne verstehen, wie es in Klassen funktioniert.

Der Versuch, typedef auf eine Klasse Funktion anwenden bekommt einen Fehler Zeiger auf diesen Funktionstyp wird noch nicht unterstützt, versuchte die Anweisungen oben, aber da es nicht für was und keine Kommentare angezeigt wird, nichts funktioniert.

Ich frage mich nur: Wie wollen Sie es verwenden?

 

Warum müssen Sie einen Zeiger auf die gesamte Klasse speichern? Hier ist ein Beispiel: https://docs.mql4.com/ru/basis/types/this

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

Was macht man danach damit?

 
Vladimir Simakov:
Sie können nicht

Es stellt sich die Frage: Wenn man das nicht kann, warum schreibt man dann Funktionen in eine Klasse, die Funktionen annimmt? Außerdem müssen Sie manchmal eine Schnittstelle implementieren, und manchmal wissen Sie nicht, welche Funktion Sie aufrufen sollen.

 
Seric29:

Es stellt sich die Frage: Wenn man das nicht kann, warum schreibt man dann Funktionen in eine Klasse , die Funktionen annimmt? Außerdem müssen Sie manchmal eine Schnittstelle implementieren, und manchmal wissen Sie nicht, welche Funktion Sie aufrufen sollen.

Wie funktioniert das?

 
Vladimir Simakov:

Wie funktioniert das?

Als Parameter wird ein Zeiger auf eine Funktion übergeben. Wie ich sehe, hat noch niemand herausgefunden, wie man das mit Klassen machen kann. Es ist mir auch immer noch nicht klar, warum ein Zeiger auf eine Klasse zurückgegeben werden sollte.

Hier sind interessante Beispiele, die aber nichts mit meiner Frage zu tun haben.

#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"); }
}
Ich habe auch etwas Ähnliches im Leitfaden gesehen, aber ich habe diese Seiten bereits geschlossen, da mir die Hände weh tun und ich zu tun habe.