Preguntas sobre POO en MQL5 - página 89

 
Si la estructura tiene un solo campo, está bien. Si hay más, no tiene sentido e incluso es una tontería.
 
Dmitry Fedoseev:
Si la estructura tiene un solo campo, está bien. Si hay más, no tiene sentido e incluso es estúpido.

¿Quién querría una estructura de campo único? ¿Cómo ayuda esta "estructura"?

 
Mikhail Dovbakh:

¿Quién querría una estructura de campo único? ¿Cómo ayuda esta "estructuración"?

estructura que envuelve un array

MQL no puede manejar punteros, pero sí estructuras sin restricciones, por lo que hay que envolver un array en una estructura

 
Igor Makanu:

estructura que envuelve un array

MQL no puede manejar punteros, pero puede manejar estructuras sin ninguna limitación, así que tenemos que envolver un array en una estructura

¿No sería más fácil envolverlo en una clase? Aun así, la estructura es, en primer lugar, una ventaja cuando se trabaja con una lista de datos estática. Además, cuando se trabaja con una estructura dinámica, no es conveniente aterrizarla después.

 
Alexandr Andreev:

¿No sería más fácil envolverlo en una clase? Una estructura es principalmente una ventaja cuando se trabaja con una lista estática de datos. Y cuando se trabaja con una estructura dinámica, no es conveniente aterrizarla.

es más sencillo en

Y para evitar la multiplicación de tipos, hice una clase que describe la sección pública de la estructura, utilizando estos tipos parcialmente fuera de la clase,

utilizarlos como estructuras normales, lo único es más colones, pero no diré que me molesta

 
Mikhail Dovbakh:

¿Quién querría una estructura de campo único? ¿Cómo ayuda esta "estructura"?

Ese era un... como se llame... tesis retórica))

Sin embargo, a veces puede ser útil poner un array en una estructura y luego utilizar un array de estas estructuras.

 
Funciona bien. Sólo hay una cosa. Cuando se devuelve una estructura desde una función, no se devuelve la estructura creada dentro de la función, sino una copia de esta estructura, es decir, se inicia un constructor de copia implícito.
 
Vladimir Simakov:
Funciona bien. Sólo hay una cosa. Cuando se devuelve la estructura desde la función, no es la estructura creada dentro de la función, sino una copia de esta estructura, es decir, se lanza el constructor de copia implícito.
No hay copias innecesarias, la estructura se crea en la pila y el campo requerido se copia de ella.
 
Aliaksandr Hryshyn:
No hay copias innecesarias, la estructura se crea en la pila y el campo requerido se copia de ella.
Esto es si el compilador lo optimiza. Pero en caso contrario, cuando se llame a f(), ocurrirá lo siguiente. El puntero en la parte superior de la pila se desplaza por el tamaño de la estructura (el resultado se devolverá aquí). El código de la función sube a la pila. Además, en el proceso de ejecución llegamos a la declaración de la estructura. El puntero de la pila se desplaza de nuevo a su tamaño. Es esta estructura la que se llena con la función. Antes de que la función salga, la memoria asignada para la estructura en la función se copia en la memoria asignada para el retorno.
 
Vladimir Simakov:
Esto es si el compilador cooptimiza. En caso contrario, cuando se llame a f(), ocurrirá lo siguiente. El puntero del nodo de la pila se desplaza al tamaño de la estructura (aquí es donde se devolverá el resultado). El código de la función sube a la pila. Además, en el proceso de ejecución llegamos a la declaración de la estructura. El puntero de la pila se desplaza de nuevo a su tamaño. Es esta estructura la que se llena con la función. Antes de que la función salga, la memoria asignada para la estructura en la función se copia en la memoria asignada para el retorno.
Lo más probable es que lo optimice.