Me llevó 2 horas aislar el problema del código del proyecto.
#define PRINT(x) Print(#x, ":", string(x))
template<typename DATA_TYPE>
struct Wrapper{
uchar type;
DATA_TYPE data;
template<typename T>
voidoperator=(T value){ // при замене данной строки на "void operator=(T &value){" происходит перезапись оператора присвоения в классе наследнике B (код не компилируется).this.data = value;
};
voidoperator=(DATA_TYPE &_data){
this.data = _data;
};
};
struct A{
string data;
voidoperator=(string value){
data = value;
};
};
struct B : Wrapper<A>{};
voidOnStart(){
B b;
string str_value;
b = str_value;
A a;
b = a;
B b1;
b = b1;
}
Usando el código anterior todo funciona como se espera, sin embargo si intentamos extender la funcionalidad y añadir soporte no sólo para tipos simples como (string) de la clase A, sino también para estructuras, resulta que el operador de asignación de la plantilla de la clase base anula los operadores de asignación por defecto de las clases descendientes, matando toda la funcionalidad. Se pueden utilizar otros operadores como solución, como "operator*=", pero es un lío.
Para los desarrolladores: Por favor, añada la posibilidad de especificar la generación forzada de código para el operador de asignación por defecto (constructor de copia):
Gente conocedora, ¡una pista! Tengo un símbolo personalizado basado en uno real. ¿Cómo puedo hacer que una operación esté disponible en el gráfico de este símbolo? ¿O no existe esta funcionalidad en MT5?
En versiones recientes de MT, como parte del cambio de paradigma en el manejo de cadenas, se considera que se abandona el uso de cadenas terminadas en NULL. Sin embargo, el funcionamiento de la función StringSetLength plantea una serie de preguntas.
Con StringSetLength sólo se puede truncar la longitud de una cadena, pero nunca aumentarla, lo cual no tiene sentido. ¿Es este el comportamiento previsto?
Sergey Dzyublik: En las versiones recientes de MT, como parte del cambio de paradigma en el manejo de cadenas, vemos un rechazo al uso de cadenas terminadas en NULL.
rsrozhkov: Gente conocedora, ¡podéis darme una pista! Tengo un símbolo personalizado creado a partir de un símbolo real. ¿Cómo puedo hacer que una operación esté disponible en el gráfico de este símbolo? ¿O no existe esta funcionalidad en MT5?
La respuesta se explica por sí misma. Un símbolo personalizado se obtiene mediante algún tipo de transformación a partir de símbolos reales. Alguien (EA, script o manualmente) tiene que hacer la transformación inversa y enviar órdenes para los símbolos reales.
Usando el código anterior todo funciona como se espera,
sin embargo si intentamos extender la funcionalidad y añadir soporte no sólo para tipos simples como (string) de la clase A, sino también para estructuras,
resulta que el operador de asignación de la plantilla de la clase base anula los operadores de asignación por defecto de las clases descendientes, matando toda la funcionalidad.
Se pueden utilizar otros operadores como solución, como "operator*=", pero es un lío.
Para los desarrolladores:
Por favor, añada la posibilidad de especificar la generación forzada de código para el operador de asignación por defecto (constructor de copia):
Me puede decir si uso indicadores estándar en mi EA, por ejemplo, iMA,
¿cómo configuro sus estilos de dibujo para que se muestren correctamente en la ventana de visualización?
Me puede decir si uso indicadores estándar en mi EA, por ejemplo, iMA,
¿Cómo puedo configurar los estilos de dibujo para que se muestren correctamente en la ventana de visualización?
Así:Color de entrada de la media móvil personalizada
Así:Color de entrada de la media móvil personalizada
De hecho, tienes que escribir tu propio indicador. Reescribir los indicadores estándar no es la solución.
La pregunta era exactamente cómo establecer el estilo para el indicador estándar.
¿Hay alguna otra manera?
Sin embargo, el funcionamiento de la función StringSetLength plantea una serie de preguntas.
Con StringSetLength sólo se puede truncar la longitud de una cadena, pero nunca aumentarla, lo cual no tiene sentido.
¿Es este el comportamiento previsto?
Resultado:
En las versiones recientes de MT, como parte del cambio de paradigma en el manejo de cadenas, vemos un rechazo al uso de cadenas terminadas en NULL.
¿Podría desarrollar esta idea?
Gente conocedora, ¡podéis darme una pista! Tengo un símbolo personalizado creado a partir de un símbolo real. ¿Cómo puedo hacer que una operación esté disponible en el gráfico de este símbolo? ¿O no existe esta funcionalidad en MT5?
La respuesta se explica por sí misma. Un símbolo personalizado se obtiene mediante algún tipo de transformación a partir de símbolos reales. Alguien (EA, script o manualmente) tiene que hacer la transformación inversa y enviar órdenes para los símbolos reales.