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

 
Los comentarios que no son relevantes para este tema se han movido a "POO, plantillas, macros en mql5, consejos y trucos del oficio".
 

No sé si se publicó aquí o no, pero puede ser útil para alguien. Cuando se necesita sobrecargar un método de una clase parametrizada sólo por si toma un argumento del mismo tipo por valor o por referencia (las estructuras se pasan sólo por referencia, los tipos simples más a menudo por valor). Se puede hacer de esta manera (y la segunda manera se aplica exactamente a la variante sin &, de lo contrario la tipificación básica por estructuras no compilará)

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

void OnStart()
 {
    double ask=Ask,bid=Bid;
    MqlTick mt;
    A<double> a1;
    a1<<Ask<<Bid<<ask;
    A<MqlTick> a2;
    a2<<mt; 
 }

Discusión aquí.

 
Ilya Malev:

No recuerdo si fue aquí o no, pero puede ser útil para alguien. Cuando se quiere sobrecargar un método de una clase parametrizada sólo por valor, o sólo por referencia (las estructuras se pasan sólo por referencia, los tipos simples más a menudo por valor). Esto se puede hacer de esta manera (además, la segunda plantilla se aplica exactamente a la variante sin &, de lo contrario la tipificación básica por estructuras no compilará)

Luego resulta que una clase diseñada para un tipo de estructura puede aceptar toda clase de tipos numéricos. ¿Y qué hacer con ellos?

 
Alexey Navoykov:

Luego resulta que una clase diseñada para un tipo de estructura puede aceptar toda clase de tipos numéricos. ¿Y qué hacer con ellos?

En este caso, la clase está pensada para tipos mixtos, tanto para estructuras como para tipos simples, de lo contrario esta construcción no tiene sentido. Para evitar tomar tipos innecesarios en F, puede escribir una comprobación allí para typename(F), sizeof(F), etc.

 
Ilya Malev:

En este caso, la clase está pensada para tipos mixtos, tanto para estructuras como para tipos simples, de lo contrario esta construcción no tiene sentido. Para no aceptar tipos innecesarios en F, puede escribir allí una comprobación de typename(F), sizeof(F), etc.

El typename no protegerá de aceptar tipos innecesarios) Para esto, necesitas hacer un método privado sobrecargado con un tipo apropiado.

Y si la clase está pensada para cualquier tipo, ¿por qué parametrizarla con un parámetro de plantilla, creando confusión? Aunque hay variantes más sencillas para la muleta, sin clases de plantilla.

 
Alexey Navoykov:

si una clase está destinada a ser de cualquier tipo, ¿por qué parametrizarla con un parámetro de plantilla, creando confusión?

Entonces, ¿cómo se toma el tipo correcto, que puede ser cualquier tipo, sin comprometer la parametrización? No se puede declarar un parámetro o campo sin especificar un tipo. Por ejemplo, podría ser una clase "envolvente" de un tipo de datos arbitrario.

Alexey Navoykov:

typename no protege contra la aceptación de tipos innecesarios )

Si se escribe typename(F)==typename(T), se protegerá.

 
Ilya Malev:

Entonces, ¿cómo va a aceptar el tipo correcto, que puede ser cualquier cosa, sin pasar la parametrización? No se puede declarar un parámetro o un campo sin especificar un tipo. Por ejemplo, puede ser una clase "envolvente" para un tipo de datos arbitrario.

Bueno, entonces es sólo la clase A. ¿Por qué declarar un patrón si su parámetro no está relacionado de ninguna manera con el comportamiento de la clase?

Ilya Malev:

Si escribes typename(F)==typename(T), lo protegerá.

Esto es realmente una cosa cruel. Llevando el control de los tipos a la etapa de ejecución... Sus códigos tendrán que ser depurados durante años

 
¿Puedes decirme dónde puedo buscar un trailing stop normal por cinco euros?
 
Nikita Chernyshov:
¿Puedes decirme dónde puedo buscar un trailing stop normal por cinco euros?

iSAR iOsMA EA-Trailing

 
Vladimir Karputov:

iSAR iOsMA EA-Trailing

Gracias.

Razón de la queja: