Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 193

 
fxsaber:

Absolut alle Regeln sind künstlich.

Ich stimme zu. Die Frage ist das Niveau der Kunst :)

 

Wenn Sie einen benutzerdefinierten Indikator mit vielen (z. B. 50) Parametern verwenden, wie lassen sich die Indikatorparameter am besten verwalten? (außer der direkten Übertragung von Parametern eines Indikators an Expertenpaare, hier ist alles klar)

Ich habe die Verwendung von *.set file loading im Code eines anderen gefunden, wenn ich iCustom aufrufe, aber ich habe nichts dieser Art gefunden und es sieht so aus, als würde es im Test nicht funktionieren.

Vielleicht weiß jemand Bescheid und es gibt ein paar undokumentierte Tricks?

 

Der letzte Release-Build ist 2650. Es ist in Ordnung, wenn ein Skript wie dieses nicht kompiliert werden kann:

struct A_INFO
{
  int a;
};

bool operator<(const A_INFO &First,const A_INFO &Second) //operator< has invalid parameters count
{
  return First.a<Second.a;
}

void OnStart()
{
}

Und das ist normal:

struct A_INFO
{
  int a;
};

bool operator<(const A_INFO &First)
{
  return true;
}

void OnStart()
{
}

Wird erwartet, dass ich 1 Wert vergleiche? Oder warum kann der Betreiber nicht zu einerNicht-Mitgliedsstruktur gemacht werden?

 
Und eine zweite Folgefrage. Warum kann ArraySort nicht auf ein Array von solchen Strukturen angewendet werden? Was hindert sie daran, mit dem definierten Operator < verglichen zu werden?
 
traveller00:

Er erwartet, dass ich 1 Wert vergleiche?

Der zweite Wert (der links vom Operator) ist der folgende.

 
fxsaber:

Der zweite Wert (der Wert links vom Operator) ist der folgende.

Warum dies, wenn ich den Operator nicht zu einem Mitglied der Struktur, sondern global gemacht habe? Oder kann ich es nicht global machen? C++ verhält sich anders.

 
traveller00:

Warum dies, wenn ich den Operator global und nicht als Mitglied der Struktur gemacht? Oder kann ich das nicht global machen? C++ verhält sich anders.

Ich weiß nichts über solche Betreiber.

 
traveller00:
Und die zweite Folgefrage. Warum kann ArraySort nicht auf ein Array mit solchen Strukturen angewendet werden? Was hindert sie daran, über den Operator < zu vergleichen, der definiert ist?

Das eingebaute ArraySort ist nur eine Funktion, die für alle Standardtypen überladen ist.

Klassen und andere OOP sind eine Hilfe. Wenn alle Typen (Strukturen) einen gemeinsamen Vorfahren hätten(CObject in SB) und so weiter...

 
Aleksey Mavrin:

Das eingebaute ArraySort ist nur eine Funktion, die für alle Standardtypen überladen ist.

Klassen und andere OOP sind eine Hilfe. Wenn alle Typen (Strukturen) einen gemeinsamen Vorfahren hätten (CObject in SB) und so weiter...

Ja, ich habe eine ungefähre Vorstellung davon, wie es drinnen gemacht wird. Die Frage war eher nicht zu beantworten. Aber als Anregung, auf andere Implementierungsvarianten zu achten, z.B. STL, und Container auf ähnliche Weise zu behandeln, wo wir universelle Dinge schreiben können, einschließlich Sortierer.

 
traveller00:

Ich habe eine ungefähre Vorstellung davon, wie es im Inneren aussieht. Die Frage war nicht um einer Antwort willen gestellt worden. Aber als Vorschlag, die Aufmerksamkeit auf andere Varianten der Umsetzung, zum Beispiel STL zu zahlen, und eine ähnliche Art der Arbeit mit Containern zu tun, wo wir universelle Dinge, einschließlich Sortierer schreiben können.

Kein Zweifel, STL für sicher) Während ArraySort kann überladen werden, indem Sie es Template-basierte und dann verwenden, aber ich bin kein Spezialist für Templates, ich bin gewohnt, mit einfachen Klassenhierarchien zu arbeiten.