Biblioteca de clases genéricas - errores, descripción, preguntas, características de uso y sugerencias - página 27

 
Artyom Trishkin:
  1. Me refería a que la eliminación automática por parte del subsistema de terminal de todos sus objetos creados y poner punteros a los mismos en listas lo llamas muleta, y no consideras muleta la manipulación manual de objetos y la creación de muletas para ello
  2. Eso no era parte de lo que dijiste en el punto 1, y es la razón principal por la que respondí.
  3. Eso también, y por la misma razón.

Para qué se crean las colecciones, para las colecciones y la eliminación automática de objetos). No he dicho nada sobre el funcionamiento manual en absoluto. ¿De dónde has sacado eso?)

Estudia STL y entenderás de lo que hablo.

 
Igor Makanu:

cómo copiar correctamente, ¿puede dar un ejemplo para esta plantilla?

He utilizado la ayuda para escribir el método AddValuehttps://www.mql5.com/ru/docs/basis/types/classes

Me he devanado los sesos, pero no veo otra solución en MQL que la que escribí en mi ejemplo.

Muéstrame tu implementación de un correcto almacenamiento de datos.

A eso me refería en su caso.
void  AddValue (const T &value)  { Tptr = new T(value); mlist.Add(Tptr); }

Pero esta solución es errónea de todos modos. Una solución normal es utilizar algo como el STL. En su caso std::list.

Creo que MQL5 no lo limita. Puedes intentar traducir las fuentes STL del mismo VS a MQL

 
En la antigua generación de moderadores había al menos dos programadores profesionales. ahora no hay ninguno. y se nota mucho )
 
Andrey Pogoreltsev:
A eso me refiero en tu caso.

Pero sigue siendo una solución equivocada. La solución normal es utilizar algo como el STL. En su caso std::list.

No creo que MQL5 no lo limite. Puedes intentar traducir el código fuente STL de VS a MQL

Una vez más: MQL no es C++,

y un puntero a un objeto en MQL es, de hecho, un "handle", y un puntero en C++ es una dirección de memoria física.

¿Qué sentido tiene portar las bibliotecas C++ a MQL?

 
Igor Makanu:

Una vez más: MQL no es C++,

y un puntero a un objeto en MQL es de hecho un handle, y un puntero en C++ es una dirección de memoria física

¿Qué sentido tiene portar las bibliotecas C++ a MQL?

Implementar adecuadamente los patrones de diseño en lugar de crear problemas potenciales utilizando genéricos.

Te debe sorprender, pero los punteros del sistema operativo también son virtuales. Todavía hay que convertirlos en físicos, pero este es un nivel de trabajo completamente diferente con los punteros.

No podrás portar el 1 al 1, pero creo que podrás portar un C++03 despojado. Se dispone de soporte de plantillas y operadores.

 
Andrey Pogoreltsev:

1. Quizá te sorprenda, pero los punteros para el sistema operativo también son virtuales. Todavía hay que convertirlos en físicos, pero eso es otro nivel de manejo de punteros.

2. No podrás portar el 1 en el 1, pero podrás portar el C++03 despojado. También hay soporte de plantillas y operadores.

1. No me sorprendería

2. Bueno, esta es la verdad - incluso si se reúnen y hacen un puerto de C ++, todavía causará preguntas, pero ¿por qué no como en el original? - ¿cuál es el objetivo?

Hay una biblioteca estándar de MQL, el uso de ella al menos algún tipo de garantía de que el apoyo será proporcionado por los desarrolladores en el futuro. Ya he sido quemado un par de veces - He utilizado componentes gráficos de los artículos escritos hace unos años, es fácil de usar, al igual que el trabajo con los componentes de Delphi, pero cuando empecé a tratar de implementar proyectos más serios que tengo un montón de preguntas y ninguna respuesta por parte del autor del artículo

No recuerdo quién de los destacados programadores dijo, pero algo así: el código no debe ser bonito o legible, debe cumplir su propósito

como nuestra discusión, si no me equivoco, querías almacenar una estructura con tus datos en listas, te mostré mi implementación, que desarrollé para la misma tarea - ¿funciona mi implementación? - ¿causa errores de ejecución en los programas MQL? - Tengo curiosidad por saber en el transcurso de la conversación

 

Andrey Pogoreltsev:

C++03 es posible, creo. Hay soporte para plantillas y operadores.

Pues sí, buena suerte ))

 
Igor Makanu:

El código no tiene que ser bonito o legible, tiene que hacer su trabajo

Esto sólo es cierto hasta que se quiere perfeccionar.

 

Ya he señalado este error en la clase CLinkedList, pero lo repetiré. Los nodos inicial y final de la lista están cerrados entre sí: el Next del último nodo apunta al primer nodo, mientras que el Previous del primer nodo apunta al último. Como resultado, el bucle de búsqueda estándar se convierte en un bucle infinito:

#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())  // Цикл бесконечно бегает по кругу
    { }
} 

En C# naturalmente no se observan estas tonterías. El Next del último nodo es cero, así como elPrevious del primer nodo.

No sé si es alguna "característica" inventada por los desarrolladores (aunque no veo su utilidad), pero en cualquier caso el comportamiento de la librería debería corresponder al original.

 
Alexey Navoykov:

Ya he señalado este error en la clase CLinkedList, pero lo repetiré. Los nodos inicial y final de la lista están cerrados entre sí: el siguiente del último nodo apunta al primero, mientras que el anterior del primero apunta al último. Como resultado, el bucle de búsqueda estándar se convierte en un bucle infinito:

En C#, naturalmente, no hay tal tontería. El Next del último nodo es cero, así como elPrevious del primer nodo.

No sé si se trata de alguna "característica" inventada por los desarrolladores (aunque no le veo ningún beneficio), pero en cualquier caso el comportamiento de la biblioteca debería corresponder al original.

¿Qué demonios está pasando aquí de nuevo? Están borrando puestos perfectamente buenos de LinkedList. Así, en algún lugar de Europa, un moderador anónimo está borrando los mensajes de los odiados rusos mientras se ríe maliciosamente. Menudo basurero, dan ganas de no escribir.