Generische Klassenbibliothek - Bugs, Beschreibung, Fragen, Nutzungsmöglichkeiten und Vorschläge - Seite 27

 
Artyom Trishkin:
  1. Ich meinte, dass die automatische Entfernung aller von Ihnen erstellten Objekte durch das Terminal-Subsystem und die Aufnahme von Zeigern auf diese Objekte in Listen als Krücke bezeichnet wird, während Sie die manuelle Handhabung von Objekten und die Erstellung von Krücken nicht als Krücke betrachten
  2. Das gehörte nicht zu dem, was Sie in Nr. 1 sagten, und ist der Hauptgrund, warum ich es Ihnen sagte.
  3. Auch das, und zwar aus demselben Grund.

Wozu legt man Sammlungen an, für Sammlungen und das automatische Löschen von Objekten?) Ich habe überhaupt nichts über den manuellen Betrieb gesagt. Woher haben Sie das?)

Studieren Sie STL und Sie werden verstehen, wovon ich spreche.

 
Igor Makanu:

wie man richtig kopiert, können Sie ein Beispiel für diese Vorlage geben?

Ich habe die Hilfe verwendet, um die AddValue-Methodehttps://www.mql5.com/ru/docs/basis/types/classes zu schreiben.

Ich habe mir das Hirn zermartert, aber ich sehe keine andere Lösung in MQL, als ich in meinem Beispiel geschrieben habe!

Zeigen Sie mir Ihre Implementierung der korrekten Datenspeicherung.

Das ist es, was ich in Ihrem Fall meinte.
void  AddValue (const T &value)  { Tptr = new T(value); mlist.Add(Tptr); }

Aber diese Lösung ist ohnehin falsch. Eine normale Lösung ist die Verwendung einer STL-Datei. In Ihrem Fall std::list.

Ich denke, MQL5 schränkt das nicht ein. Sie können versuchen, STL-Quellen aus demselben VS in MQL zu übersetzen

 
In der alten Generation der Moderatoren gab es mindestens zwei professionelle Programmierer. Jetzt gibt es keine mehr, und das ist sehr auffällig.)
 
Andrey Pogoreltsev:
Das ist es, was ich in Ihrem Fall meine.

Aber es ist trotzdem die falsche Lösung. Die normale Lösung besteht darin, etwas wie STL zu verwenden. In Ihrem Fall std::list.

Ich glaube nicht, dass MQL5 es nicht einschränkt. Sie können versuchen, den STL-Quellcode von VS nach MQL zu übersetzen

Noch einmal: MQL ist nicht C++,

und ein Zeiger auf ein Objekt in MQL ist in der Tat ein Handle, und ein Zeiger in C++ ist eine physische Speicheradresse.

welchen Sinn hat es, C++-Bibliotheken auf MQL zu portieren?

 
Igor Makanu:

Noch einmal: MQL ist nicht C++,

und ein Zeiger auf ein Objekt in MQL ist in der Tat ein Handle, und ein Zeiger in C++ ist eine physische Speicheradresse

welchen Sinn hat es, C++-Bibliotheken auf MQL zu portieren?

Die Entwurfsmuster ordnungsgemäß zu implementieren, anstatt mit Hilfe von Generika potenzielle Probleme zu schaffen.

Sie werden überrascht sein, aber die Zeiger für das Betriebssystem sind ebenfalls virtuell. Man muss sie immer noch in physische umwandeln, aber das ist eine ganz andere Ebene der Arbeit mit Zeigern.

Sie werden nicht in der Lage sein, 1 in 1 zu portieren, aber ich denke, Sie werden in der Lage sein, ein abgespecktes C++03 zu portieren. Unterstützung von Vorlagen und Operatoren ist verfügbar.

 
Andrey Pogoreltsev:

1. Es mag Sie überraschen, aber auch Zeiger für das Betriebssystem sind virtuell. Sie müssen noch in physische Daten umgewandelt werden, aber das ist eine ganz andere Ebene der Zeigerverwaltung.

2. Sie werden nicht in der Lage sein, 1 in 1 zu portieren, aber Sie werden in der Lage sein, das abgespeckte C++03 zu portieren. Auch die Unterstützung von Vorlagen und Operatoren ist vorhanden.

1. ich würde nicht überrascht sein

2) Nun, hier ist die Wahrheit - selbst wenn man sich zusammentut und eine Portierung von C++ vornimmt, wird sie immer noch Fragen aufwerfen, aber warum nicht wie im Original? - Was ist der Grund dafür?

Es gibt eine Standard-Bibliothek von MQL, mit ihm zumindest eine Art von Garantie, dass die Unterstützung von den Entwicklern in der Zukunft zur Verfügung gestellt werden. Ich habe bereits ein paar Mal verbrannt - ich verwendet Grafik-Komponenten aus Artikeln vor ein paar Jahren geschrieben, es ist einfach zu bedienen, ähnlich wie die Arbeit mit Delphi-Komponenten, aber wenn ich begann zu versuchen, mehr ernsthafte Projekte zu implementieren, bekam ich eine Menge Fragen und keine Antwort vom Autor des Artikels

Ich weiß nicht mehr, wer von den prominenten Programmierern sagte, aber etwas in der Art: der Code sollte nicht schön oder lesbar sein, er muss seine Aufgabe erfüllen

als unsere Diskussion, wenn ich mich nicht irre, wollten Sie eine Struktur mit Ihren Daten in Listen speichern, zeigte ich Ihnen meine Implementierung, die ich für die gleiche Aufgabe entwickelt - funktioniert meine Implementierung? - verursacht es Laufzeitfehler in MQL-Programmen? - Ich bin gespannt, im Laufe des Gesprächs herauszufinden

 

Andrey Pogoreltsev:

C++03 ist möglich, denke ich. Unterstützung für Vorlagen und Operatoren ist verfügbar.

Nun ja, viel Glück ))

 
Igor Makanu:

Der Code muss nicht schön oder lesbar sein, er muss seine Aufgabe erfüllen

Das gilt nur so lange, bis Sie es verfeinern wollen.

 

Ich habe bereits auf diesen Fehler in der Klasse CLinkedList hingewiesen, aber ich wiederhole ihn noch einmal. Die Anfangs- und Endknoten der Liste sind zueinander geschlossen: Next des letzten Knotens zeigt auf den ersten Knoten, während Previous des ersten Knotens auf den letzten zeigt. Dadurch wird die Standardsuchschleife zu einer Endlosschleife:

#include <Generic\LinkedList.mqh>

void OnStart()
{
  CLinkedList<string> list;
   
  list.AddLast("One");
  list.AddLast("Two");
  list.AddLast("Three");
  int i=0;
  for (CLinkedListNode<string> *node= list.First();  node!=NULL;  node=node.Next())  // Цикл бесконечно бегает по кругу
    { }
} 

In C# wird so ein Unsinn natürlich nicht beachtet. Das Next des letzten Knotens ist Null, ebenso wie dasPrevious des ersten Knotens.

Ich weiß nicht, ob es sich um eine von den Entwicklern erfundene "Funktion" handelt (obwohl ich ihren Nutzen nicht sehe), aber auf jeden Fall sollte das Verhalten der Bibliothek dem ursprünglichen entsprechen.

 
Alexey Navoykov:

Ich habe bereits auf diesen Fehler in der Klasse CLinkedList hingewiesen, aber ich wiederhole ihn noch einmal. Die Anfangs- und Endknoten der Liste sind zueinander geschlossen: Next des letzten Knotens zeigt auf den ersten Knoten, während Previous des ersten Knotens auf den letzten zeigt. Dadurch wird die Standardsuchschleife zu einer Endlosschleife:

In C# gibt es natürlich keinen solchen Unsinn: Das Next des letzten Knotens ist Null, ebenso wie dasPrevious des ersten Knotens.

Ich weiß nicht, ob dies eine von den Entwicklern erfundene "Funktion" ist (obwohl ich keinen Nutzen darin sehe), aber auf jeden Fall sollte das Verhalten der Bibliothek dem Original entsprechen.

Was zum Teufel ist hier los? Sie löschen vollkommen gute LinkedList-Beiträge. Einfach so, irgendwo in Europa, löscht ein anonymer Moderator Beiträge von verhassten Russen und kichert dabei bösartig. Was für ein Schrott, da hat man keine Lust zu schreiben.