Características del lenguaje mql5, sutilezas y técnicas - página 212

 
A100 #:

Te estás disparando en el pie, al declararte privado. Usted se ha limitado el acceso y luego se preguntará por qué el código, donde las funciones externas necesitan acceso público, de repente deja de funcionar

Todo funciona bien para mí y funcionará bien. No es de mi incumbencia si no usas el privado.

 
fxsaber #:

A mí me funciona bien y seguirá haciéndolo. No es de mi incumbencia si no usas el privado.

Te contradices: las estructuras simples y lo privado son cosas incompatibles.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Peculiaridades de mql5, consejos y trucos

fxsaber, 2021.11.17 07:53

Si se comparan las dos funciones, FileReadStruct sólo funciona con estructuras simples. Esta es una diferencia fundamental.

Hasta la Wikipedia lo sabe: los datossimples(POD)son un tipo de datos en los modernoslenguajes de programación de alto nivel que tienen una disposición rígida de los campos en la memoria y no requieren restricciones de acceso nicontrol automático.
 
A100 #:

Te contradices al escribir sobre estructuras simples y privadas: son cosas incompatibles

Hasta la Wikipedia lo sabe: los datossimples(POD)son un tipo de datos en los modernoslenguajes de programación de alto nivel que tienen una disposición de campos en memoria rígidamente definida y no requieren acceso restringido nicontrol automático.

El contexto estaba claro sin necesidad de leer la terminología. Simple - sin cadenas, matrices dinámicas u objetos de clase en cualquier nivel de anidamiento.

Con esta definición, simple puede ser siempre un campo de unión.

struct MqlTick2 : private MqlTick {};

union UNION
{
  MqlTick2 Tick;
  uchar Bytes[sizeof(MqlTick2)];
};

void OnStart()
{
  UNION u;
  
  ArrayInitialize(u.Bytes, 0); // обнулили u.Tick
}
privado no da ninguna garantía de inmutabilidad desde el exterior. Y eso es algo bueno.
 
fxsaber #:

El contexto era claro sin necesidad de leer la terminología. Simple - sin cadenas, matrices dinámicas y objetos de clase en cualquier nivel de anidamiento.

Con esta definición, simple puede ser siempre un campo de unión.

privado no garantiza la inmutabilidad desde el exterior. Y esto es algo bueno.

Ya se empieza a confundir lo elemental - la inmutabilidad es const, no privada

 
A100 #:

Ya estás empezando a confundirte con lo elemental: la inmutabilidad es const, no privada

Simplemente no entendiste lo que se quería decir. Tal vez no me esté explicando bien. Ya no importa.

 
fxsaber #:

A mí me funciona bien y seguirá haciéndolo. Si no usas el privado, no es asunto mío.

Si usas {} en lugar de ZeroMemory - no puede funcionar perfectamente - te lo mostré con un ejemplo concreto - no hay puesta a cero (pero todavía puedes pensar lo contrario)

 
A100 #:

Si usas {} en lugar de ZeroMemory - no puede funcionar perfectamente - te lo mostré con un ejemplo concreto

Sólo soy perfectamente consciente de qué, dónde y por qué lo aplico. La peculiaridad fue expresada. No había ganas de discutir los gustos.

 
fxsaber #:

Sólo soy perfectamente consciente de qué, dónde y por qué lo aplico. Los detalles fueron expresados. No había ganas de discutir los gustos.

Las razones para no utilizarlo se expresaron en consecuencia

 
A100 #:

Si usas {} en lugar de ZeroMemory - no puede funcionar perfectamente - te lo mostré con un ejemplo concreto - no hay puesta a cero (pero todavía puedes pensar lo contrario)

Para la unión inicializamos sólo el primer miembro, intercambiamos los campos y la prueba se ejecutará.
Consideremos si debemos cambiar el comportamiento en detrimento de la velocidad para que sea como la mayoría de los usuarios esperan.


El archivo... aparecieron cuando la privacidad y la constancia no existían, no pensamos aún en cambiar este comportamiento, ya que no lo consideramos crítico.

 
Ilyas #:

El archivo... aparecieron cuando la privacidad y la constancia no existían, no pensamos aún en cambiar este comportamiento, ya que no lo consideramos crítico.

Y no es necesario cambiar el comportamiento de las funciones existentes - basta con añadir nuevas funciones propias (con algún prefijo/sufijo) y declarar obsoletas las anteriores con el correspondiente aviso