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

 
Алексей Тарабанов:

Sie haben einen Weg gefunden, sie zu schaffen.

Sie sind über etwas verwirrt.
 
Ilya Malev:

Sie versuchen, ein statisches Feldeiner Klasse in der Initialisierungsphase zu verwenden, bevor mindestens eine Instanz dieser Klasse erstellt wurde. Meiner Meinung nach ist das eine Perversion... So funktioniert es normalerweise:

Das Prinzip der Kapselung impliziert im Allgemeinen, dass solche Felder verborgen und nicht öffentlich sein sollten.

Ein statisches Feld ist aus diesem Grund nicht davon abhängig, dass es Instanzen der Klasse gibt. Wenn Sie aber zuerst eine Instanz der Klasse erzeugen wollen - ok, erzeugen Sie sie, aber nur innerhalb der Funktion. Und fragen Sie dieses Feld von ihr ab (entweder direkt oder über eine Methode) - das Ergebnis ist wieder das gleiche.

 
Alexey Navoykov:
Sie sind über etwas verwirrt.

Nein, ich bin über nichts verwirrt.

Zuerst die Variablen der globalen Ebene, dann die statischen Variablen und dann die lokalen Variablen, wie sie im Code erscheinen.

Dieses spezielle Beispiel verstößt gegen die Empfehlung der Dokumentation,Variablen nicht mit Funktionenzu initialisieren. Es war für die Entwickler einfacher, eine solche Warnung zu schreiben, als zu erklären, was sie dürfen und was nicht.

Entfernen Sie statische Aufladung aus Ihrer Probe und erhalten Sie das gewünschte Ergebnis.

 
Алексей Тарабанов:

Nein, ich bin über nichts verwirrt.

Zuerst die Variablen der globalen Ebene, dann die statischen Variablen und dann die lokalen Variablen, wie sie im Code erscheinen.

Dieses spezielle Beispiel verstößt gegen die Empfehlung der Dokumentation,Variablen nicht mit Funktionenzu initialisieren. Es war für die Entwickler einfacher, eine solche Warnung zu schreiben, als zu erklären, was sie dürfen und was nicht.

Entfernen Sie statische Elemente aus Ihrem Beispiel und Sie erhalten das gewünschte Ergebnis.

"Empfehlung der Dokumentation" )) Ich bin erstaunt über Sie. Sie verstehen es immer noch nicht, oder? Es gibt einen Fehler in der Sprache. Die Entwickler selbst sprechen darüber und erklären Ihnen, wie Sie richtig trommeln müssen, um diesen Fehler zu vermeiden. Ich habe mir vorgenommen, diesen Fehler ein für alle Mal zu vergessen.
 
Alexey Navoykov:

Wenn es sich um eine Konstante handelt (und globale Sichtbarkeit deklariert meist Konstanten, wenn der Code intelligent ist), gibt es keine andere Wahl.

Zu allem, was gelb ist, habe ich eine Frage: WARUM? Ich habe bereits herausgefunden, wie ich das Problem lösen kann.

HIER, um das, was Sie bereits gemacht haben, nicht zu verpfuschen.

 
Alexey Navoykov:
"Empfehlung zur Dokumentation" )) Ich bin erstaunt über Sie. Haben Sie wirklich immer noch nicht begriffen, dass es einen Fehler in der Sprache gibt? Die Entwickler selbst sprechen darüber und erklären, wie man richtig trommelt, damit dieser Fehler nicht auftritt. Ich habe mir vorgenommen, diesen Fehler ein für alle Mal zu vergessen.

Sie können den Wert einer Sache nicht mit einer Funktion einleiten. Auch wenn Sie es wirklich wollen. Verstehst du das nicht?

 
Alexey Navoykov:

Ein statisches Feld ist ein statisches Feld, d.h. es hängt nicht von Instanzen der Klasse ab. Wenn Sie aber zuerst eine Instanz der Klasse erstellen wollen, OK, erstellen Sie sie, aber nur innerhalb der Funktion. Und fragen Sie dieses Feld von ihr ab (entweder direkt oder über eine Methode) - das Ergebnis wird wieder das gleiche sein.

Handelt es sich also um prozedurale oder objektorientierte Programmierung? Warum sollten wir außerdem klassenfremde Funktionen in der Phase vor der Initialisierung mit Bezug auf typisierte Objekte ausführen? Ich verstehe, dass die Antwort lautet "weil ich Lust dazu habe". Aber wenn ich der Entwickler wäre, würde ich mich nicht beeilen, alles abzubrechen und zu rennen, um dieses spezielle Verhalten zu beheben, denn es ist eine eher marginale Architektur und außerdem ist das Problem leicht zu lösen, indem man eine Instanz der Klasse erstellt. Natürlich nicht innerhalb der Funktion.

 
Alexey Viktorov:

FOREVER, um das Chaos, das Sie bereits angerichtet haben, nicht noch größer werden zu lassen.

Ich habe es bereits getan und bereue es kein bisschen. Aber Sie, wie ich sehe, haben großes Vergnügen daran, sich mit künstlichen Beschränkungen, die von MQ auferlegt werden, einzuschränken. Vielleicht sind Sie ein Masochist? ) Und doch versuchen Sie so hartnäckig, mich davon zu überzeugen, dass dies der richtige Weg ist. Es ist nicht notwendig, es ist erzwungen.
 
Алексей Тарабанов:

Sie können den Wert einer Sache nicht mit einer Funktion einleiten. Auch wenn Sie es wirklich wollen. Verstehst du das nicht?

Ja, das verstehe ich nicht. Erklären Sie das.
 
Ilya Malev:

Handelt es sich also um prozedurale oder objektorientierte Programmierung? Warum sollen plötzlich Funktionen, die nicht mit Klassen zusammenhängen, vor der Initialisierung mit typisierten Objekten ausgeführt werden? Ich verstehe, dass die Antwort lautet "weil ich Lust dazu habe". Aber wenn ich der Entwickler wäre, würde ich mich nicht beeilen, alles abzubrechen und zu rennen, um dieses spezielle Verhalten zu beheben, denn es ist eine eher marginale Architektur und außerdem ist das Problem leicht zu lösen, indem man eine Instanz der Klasse erstellt. Natürlich nicht innerhalb einer Funktion.

Sie sind also ein Befürworter der massenhaften Verwendung globaler Variablen, so wie ich es verstehe. Dann werden wir uns wohl kaum verstehen.

Außerdem kann die Funktion selbst eine Vorlage sein. Und die erzeugte Instanz sollte jeweils durch denselben Typ parametrisiert werden:

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

Und was machen Sie?

Grund der Beschwerde: