OOP, plantillas y macros en mql5, sutilezas y usos - página 3

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

Has encontrado la manera de crearlo.

Estás confundido sobre algo.
 
Ilya Malev:

Estás intentando utilizar un campo estáticode una clase en la fase de inicialización antes de que se haya creado al menos una instancia de esa clase. En mi opinión, esto es una perversión... Así es como funciona normalmente:

El principio de encapsulación implica, en general, que estos campos deben ser ocultos, no públicos.

Un campo estático es un campo estático por esa razón, por lo que no depende de tener instancias de la clase. Pero si quieres crear una instancia de la clase primero - ok, créala, pero sólo dentro de la función. Y solicita este campo desde ella (ya sea directamente o a través de un método) - el resultado es el mismo de nuevo.

 
Alexey Navoykov:
Estás confundido sobre algo.

No, no estoy confundido con nada.

Primero las variables de nivel global, luego las variables estáticas y por último las variables locales a medida que aparecen en el código.

Este ejemplo en particular viola la recomendación de la documentación de noinicializar variables con funciones. Para los desarrolladores era más fácil escribir una advertencia de este tipo que explicar dónde deben y dónde no deben.

Elimine la estática de su muestra y obtenga el resultado que desea.

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

No, no estoy confundido con nada.

Primero las variables de nivel global, luego las variables estáticas y por último las variables locales a medida que aparecen en el código.

Este ejemplo en particular viola la recomendación de la documentación de noinicializar variables con funciones. Para los desarrolladores era más fácil escribir una advertencia de este tipo que explicar dónde deben y dónde no deben.

Elimine la estática de su ejemplo y obtenga el resultado deseado.

"Recomendación de documentación" )) Estoy sorprendido por ti. Todavía no lo entiendes, ¿verdad? Hay un error en el lenguaje. Los propios desarrolladores hablan de ello, y te explican cómo hacer correctamente la pandereta para no encontrarte con este fallo. Me aseguré de olvidarme de este bicho de una vez por todas.
 
Alexey Navoykov:

Si se trata de una constante (y la visibilidad global declara sobre todo constantes, si el código es inteligente), no hay otra opción.

Con respecto a todo lo que está en amarillo, tengo una pregunta: ¿por qué? Ya he descubierto cómo resolver el problema.

AQUÍ para no ensuciar lo que ya has hecho.

 
Alexey Navoykov:
"Recomendación de documentación" )) Estoy asombrado de ti. ¿Realmente aún no has captado el punto? Hay un error en el lenguaje. Los propios desarrolladores hablan de ello, y te explican cómo panderetear correctamente para no encontrarte con este fallo. Me aseguré de olvidarme de este bicho de una vez por todas.

No se puede iniciar el valor de algo con una función. Incluso si realmente quieres hacerlo. ¿No lo entiendes?

 
Alexey Navoykov:

Un campo estático es un campo estático, por lo que no depende de instancias de la clase. Pero si quieres crear una instancia de la clase primero, vale, créala, pero sólo dentro de la función. Y solicita este campo desde ella (ya sea directamente o a través de un método) - el resultado será el mismo de nuevo.

Entonces, ¿es la programación procedimental o la orientada a objetos? Por qué debemos ejecutar funciones no relacionadas con las clases en la etapa anterior a la inicialización con referencia a objetos tipados además. Entiendo que la respuesta es "porque me apetece". Pero si yo fuera un desarrollador, no me apresuraría a cancelar todo y correr a arreglar este comportamiento en particular, porque es una arquitectura bastante marginal y además, el problema se resuelve fácilmente creando una instancia de la clase. No dentro de la función, por supuesto.

 
Alexey Viktorov:

PARA SIEMPRE, para no ensuciar lo que ya has ensuciado.

Yo ya lo he hecho y no me arrepiento ni un poco) Pero tú, por lo que veo, sientes un gran placer al limitarte con las restricciones artificiales impuestas por MQ. ¿Quizá eres masoquista? ) Y, sin embargo, tratas de convencerme con tanta insistencia de que esa es la forma de hacerlo. No es necesario, es forzado.
 
Алексей Тарабанов:

No se puede iniciar el valor de algo con una función. Incluso si realmente quieres hacerlo. ¿No lo entiendes?

Sí, no entiendo. Explica.
 
Ilya Malev:

Entonces, ¿se trata de programación procedimental u orientada a objetos? Por qué, de repente, realizar funciones no relacionadas con las clases antes de la inicialización con respecto a los objetos tipados. Entiendo que la respuesta es "porque me apetece". Pero si yo fuera un desarrollador, no me apresuraría a cancelar todo y correr para arreglar este comportamiento en particular, porque es una arquitectura bastante marginal y además, el problema se resuelve fácilmente creando una instancia de la clase. No dentro de una función, por supuesto.

Así que eres partidario del uso masivo de variables globales, según tengo entendido. Entonces es poco probable que tú y yo nos entendamos.

Además, la propia función puede ser una plantilla. Y la instancia creada, respectivamente, debe ser parametrizada por el mismo tipo:

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

¿Qué hace usted?

Razón de la queja: