OOP, Vorlagen und Makros in mql5, Feinheiten und Anwendungen - Seite 19

 
Seric29:

Dieses Makro wird ungültig sein, um ein Ergebnis zurückzugeben, muss ein Ausdruck berechnet werden, mit anderen Worten, Sie müssen eine Funktion darin aufrufen, zu diesem Schluss bin ich gekommen.

Ja, versuchen Sie zuerst, diesen "Wunder"-Code zu kompilieren. Einige Jungs hier fantasieren wild drauflos, abgekoppelt von der Realität.

 
Vict:

Ich weiß nicht, was die Aufgabe ist oder ob Sie dort graben, aber auf den ersten Blick ist es ein anderer Ansatz:

Sie können also jeden Teil der Funktion ersetzen (nicht notwendigerweise die Array-Füllung, wie in meinem Fall) und sie nach Bedarf instanziieren.

Das ist irgendwie idiotisch. Sie werfen einen ersten Blick auf den Code und denken: Nun, wahrscheinlich wird das Array mit den Zahlen gefüllt, die an die Funktion übergeben werden, oder auf diesen Wert gemischt... aber es stellt sich heraus...

 
Dmitry Fedoseev:

Es ist ein bisschen ein Kinderspiel. Sie sehen sich den Code auf den ersten Blick an und denken: Nun, das Array wird wahrscheinlich mit den Zahlen gefüllt, die an die Funktion übergeben werden, oder auf diesen Wert gemischt... aber es stellt sich heraus...

Ich bin nicht beeindruckt, okay, ich bin p****.

 
Vict:

Sie haben einen Algorithmus, in den Sie einen Unteralgorithmus einfügen können, ihn sozusagen "optimieren", um eine bestimmte Aufgabe zu lösen. Im Wesentlichen handelt es sich um ein Analogon der virtuellen Funktionen. Die Hauptsache ist, Sie haben sich gefragt, und jetzt wissen Sie nicht, warum)), Sie haben einen Rahmen, in dem Sie eine Schleife setzen.

Ich wollte Code zu diesem Rahmen hinzufügen und das Ganze ein Ergebnis zurückgeben lassen, aber mein Rahmen funktioniert als Leere und ich versuche, das herauszufinden. Ich brauche es, um mit Arrays verschiedener Dimensionen zu arbeiten.

 
Vict:

Aufruf einer Funktion, in der Sie einen Zeiger auf eine andere Funktion übergeben (z. B. den Schleifenkörper)

int for3(int a, int b, int c, void(*loop)()) {
        for(int i=0; i<a; i++)
                for(int j=0; j<b; j++)
                        for(int k=0; k<c; k++) 
                                loop();
        return 4;
}


mql4 funktioniert nicht mit Zeigern auf eine Funktion, auch wenn die Entwickler das nicht getan haben.

Hier ist etwas, das ich gefunden habe

typedef int(*MyFuncType)(int,int);

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, MyFuncType myfunc)
{
   int g;
   g = myfunc(x,y);
   return (g);
}

int OnInit()
{
   int m,n;
   m = operation (7, 5, addition);
   n = operation (20, m, subtraction);
   Print(n);
   return(INIT_FAILED);  //just to close the expert
}
 
Nicht jedes Makro kann also einen Wert zurückgeben, wer weiß?
 
Seric29:
Nicht jedes Makro kann also einen Wert zurückgeben, wer weiß?

Sie können aus einem Makro überhaupt keinen Wert zurückgeben. Ein Makro ist ein Ersatz für ein Stück Code durch ein anderes Stück Code.

 
Dmitry Fedoseev:

Sie können aus einem Makro überhaupt keinen Wert zurückgeben. Ein Makro ist ein Ersatz für ein Stück Code durch ein anderes Stück Code.

Ich verstehe, danke für Ihre klare und korrekte Antwort.

 
Nicht ganz richtig, das Makro kann zu einem ternären Operator?: oder Komma-Operator (nicht in µl) erweitert werden, von dem ein Wert zurückgegeben werden kann.
 
Vict:
Nun, nicht wirklich wahr, Makro kann in ternären Operator erweitert werden ?: oder Komma-Operator (nicht in µl), von denen Sie Wert zurückgeben können.

In C++ sind ternäre Operatoren weiter entwickelt, wenn die Bedingung wahr ist, kann man mehrere Aktionen durchführen und mql4 hat nach wie vor einen engen Zugriff auf den Speicher und zumindest seit 10 Jahren haben die Entwickler keine wesentlichen Änderungen vorgenommen und keine nennenswerten Funktionen geschaffen (es gibt nur Funktionen, die mit Farben und Text arbeiten und sonst nichts - einfach Dummheit).

Grund der Beschwerde: