Nun, ja, ich verwende hier nicht alle Modifikatoren richtig, deshalb hat es meine Bewunderung hervorgerufen, ich habe es überprüft, jetzt habe ich den Code verschleiert, obwohl ich ihn nur kompakt schreiben wollte ))))
Meine Implementierung von construct for each von MQL.
Bisher funktioniert es nur für Arrays: 1) reguläre mql-Arrays; 2) benutzerdefinierte Array-Klassen, die [](int)-Operator definiert und globaleArraySize-Funktion überladen haben sollte.
Syntax:
foreach(element_var, array) { ... }
Ein Array kann entweder als Variable oder als Ausdruck definiert werden - deshalb mussten wir den Garten bauen). Der Ausdruck wird einmal ausgeführt, wobei ein Zeiger auf das Array gespeichert und dann auf den Zeiger zugegriffen wird.
Meine Implementierung von construct for each von MQL.
Bisher funktioniert es nur für Arrays: 1) reguläre mql-Arrays; 2) benutzerdefinierte Array-Klassen, die [](int)-Operator definiert und globale ArraySize-Funktion überladen haben sollte.
Das ist cool! Ist es möglich, eine solche Variante zu erstellen?
voidOnStart()
{
MqlTick Ticks[3];
for (int i = 0; i < ArraySize(Ticks); i++)
Ticks[i].bid = i + 1;
foreach(MqlTick Tick, Ticks) Print(Tick.bid); // OK
foreach(MqlTick Tick[1], Ticks) ArrayPrint(Tick); // 'Tick' - invalid array access
}
Alexey Navoykov: Nun, die Initialisierung eines Arrays mit Variablen wird in MQL nicht unterstützt. Sie können eine Zuweisung an ein Arrayelementvornehmen :
Ich habe noch nicht herausgefunden, wie die Umsetzung erfolgt, aber ich sehe keinen Sinn darin, es auf diese Weise zu tun.
Ja, das ist sie. Als ich begann, mich damit zu befassen, entdeckte ich eine interessante Besonderheit. Wenn ein Argument eines konstanten Typs( z. B.const int) an eine Schablone übergeben wird, wird es einfach als: T = int aufgefasst, aber die Konstante wird auch irgendwie berücksichtigt, was verwirrend ist:
template<typename T>
class B { };
template<typename T>
void f(T & a)
{
B<const T> b; // OK. Значит T==int
const T arr[]={}; // Тоже всё ОК.
T arr2[]; // 'arr2' - 'const' variable must be initialized. wtf?
}
voidOnStart()
{
constint a=0;
f(a);
}
Zuerst dachte ich, es sei eine Funktion von MQL, aber es ist dasselbe in C++.
// Некоторые возможности структур, которых нет у классов.hm, interessant, wirklich mochte die Idee mit const Felder, const wird nur einmal initialisiert werden
hm, interessant, ich mag die Idee mit const Felder, const wird nur einmal initialisiert werden
Sie können jetzt auf diese Weise eine Losnormalisierung durchführen:
Sie können konstante Mitglieder auch in Klassen deklarieren.
Sie können auch konstante Mitglieder in Klassen deklarieren.
Nun, ja, ich verwende hier nicht alle Modifikatoren richtig, deshalb hat es meine Bewunderung hervorgerufen, ich habe es überprüft, jetzt habe ich den Code verschleiert, obwohl ich ihn nur kompakt schreiben wollte ))))
ZS: Die Faltung in ME ist wirklich mangelhaft! - es ist ermüdend, das Mausrad hin und her zu drehen (((Meine Implementierung von construct for each von MQL.
Bisher funktioniert es nur für Arrays: 1) reguläre mql-Arrays; 2) benutzerdefinierte Array-Klassen, die [](int)-Operator definiert und globaleArraySize-Funktion überladen haben sollte.
Syntax:
foreach(element_var, array) { ... }Ein Array kann entweder als Variable oder als Ausdruck definiert werden - deshalb mussten wir den Garten bauen). Der Ausdruck wird einmal ausgeführt, wobei ein Zeiger auf das Array gespeichert und dann auf den Zeiger zugegriffen wird.
Beispiele für den Gebrauch:
Beispiele für die Verwendung:
Ein wenig umgeschrieben
Meine Implementierung von construct for each von MQL.
Bisher funktioniert es nur für Arrays: 1) reguläre mql-Arrays; 2) benutzerdefinierte Array-Klassen, die [](int)-Operator definiert und globale ArraySize-Funktion überladen haben sollte.
Das ist cool! Ist es möglich, eine solche Variante zu erstellen?
Das ist cool! Ist es möglich, eine Version davon zu erstellen?
foreach(Ticks[0], Ticks) ArrayPrint(Ticks[0].bid);Nun, die Initialisierung eines Arrays mit Variablen wird in MQL nicht unterstützt. Sie können eine Zuweisung an ein Arrayelement vornehmen :
Ich habe noch nicht herausgefunden, wie die Umsetzung erfolgt, aber ich sehe keinen Sinn darin, es auf diese Weise zu tun.
Das funktioniert nicht
Diese Variante funktioniert nicht
Zuerst dachte ich, es sei eine Funktion von MQL, aber es ist dasselbe in C++.
Zuerst dachte ich, es sei eine Funktion von MQL, aber es ist auch in C++ so.
weil der Typ const int ist. Es ist nur so, dass man in der Vorlage ohne Probleme const an den Anfang setzen kann
aber wenn man in C++ const von einem Typ durch einige einfache Manipulationen entfernen kann, kann man das in Mql nicht tun.