Errores, fallos, preguntas - página 2472

 

Creo un símbolo personalizado y lo lleno con 25 años de barras diarias, esto debería pesar unos 400kb. Sin embargo, en la carpeta de símbolos se crean archivos .hcc con un tamaño total de 15 mb. Encima todo esto tarda unos 20 segundos... ¿Cómo se explica esto?

 
Sergey Dzyublik:

Me sorprendió descubrir que era posible declarar un typedef con un puntero a una función de plantilla.
Sin embargo, la felicidad no duró mucho.

Que es a lo que me refería
 

Recientemente se han reportado docenas de "características" y errores en la MT.
¿Cómo sabemos si vale la pena esperar a que se arreglen o no?
Por favor, no sugieras que se pruebe todo cada vez que se publique una nueva versión.

(no se ha arreglado en MT5(build 2057)) "Probador de Estrategias: 2 pases previstos, pero en la práctica número infinito de pases > 900pc debido a un error "OnInit critical error"".
#(no solucionado en MT5(build 2057))"Valor inválido del campo de tamaño del array dentro del operador de asignación por defecto para estructuras con arrays dinámicos.
(no corregido en MT5(build 2057))"El compilador no ve el constructor de copia por defecto para la clase cuando devuelve un objeto de clase por valor desde una función".
#(no corregido en MT5(build 2057)) Error de compilación en el reparto de tipos "en sí mismo" para clases patrón y estructuras "complejas".
(no arreglado en MT5(build 2057))"Cuando se trabaja con typedef, el uso de una función de plantilla con especialización explícita no genera código para esta función de plantilla".
(no solucionado en MT5(build 2057))"Error de compilación al reutilizar la misma firma de función dentro de typedef".
#
(no corregido en MT5(build 2057)) La mayor parte de las funciones de cadena no funcionan con caracteres NULL en una cadena (por ejemplo: ShortArrayToString, StringInit, StringFill)".
#(no arreglado en MT5(build 2057)) La función StringSetLength sólo funciona para "recortar" la longitud de la cadena, no para aumentarla.
(arreglado en MT5(build 2057))"Probador de Estrategias: 750 procesos "metatester64.exe"se están ejecutando".
#
"Foro www.mql5.com, al editar un mensaje con una imagen, la imagen anterior no se sustituye por la nueva".


Sugerencias:
"Permitir al usuario forzar la generación/eliminación de código para el operador de asignación por defecto (constructor de copias)".
"Permitir que ArrayCopy copie clases y estructuras "complejas", de forma similar a como las estructuras proporcionan una funcionalidad de copia profunda para cualquier tipo de objeto".
"Proporcionar la funcionalidad para que el usuario pueda leer/establecer el valor dela capacidad cuando se trabaja con matrices dinámicas".

"Cambios para mejorar la infografía del servicio de Señales"

 
A100:
A eso me refería.

Eltypedef de plantilla y el uso del typedef en una clase de plantilla son cosas diferentes.
La segunda opción funciona, pero hay un problema de solapamiento de espacios de nombres cuando se reutiliza una clase de plantilla con un tipo diferente.

 
Alexey Navoykov:

Creo un símbolo personalizado y lo lleno con 25 años de barras diarias, esto debería pesar unos 400kb. Sin embargo, la carpeta de símbolos crea archivos .hcc con un tamaño total de 15 mb! Y encima todo esto tarda unos 20 segundos... ¿Cómo se puede explicar esto?

Echa un vistazo a lo que está grabado.

 
fxsaber:

Mira lo que se registra.

Bueno, no conozco el formato hcc, así que no puedo comprobar lo que hay en el archivo. Pero en el terminal muestra barras diarias. Cuando cambio a un marco temporal más pequeño veo las mismas barras. Aparentemente, también guarda TODOS los marcos temporales en el archivo inicialmente, así que... Pensaba que sólo se guardaban las barras de minutos, a partir de las cuales se sintetizan todos los demás marcos temporales. Y el número de barras de minutos, como ya se ha dicho, coincide con el de las barras diarias, es decir, hay unas 7000 barras de minutos en total.

Por lo tanto, tengo la idea de que guarda 7000*M1, 7000*M2, 7000*M3, etc., hasta 7000*D1 en un archivo. Si es así, probablemente se obtendrán 15 MB en total. Corrección: unos 5 segundos(20 - al actualizar el historial existente).

 

Algo está roto en el sitio del foro: no puedo ver mis últimos mensajes.
Por ejemplo,esto y esto faltan en"Todos los puestos"
Y parece que la calificación solía ser de más de 6000 hasta hace unos meses. Aunque no lo sé, tal vez la valoración esté disminuyendo con el tiempo debido a una menor actividad.

 
class A{
public:
   struct AA{
      uchar data[8];
   };
   static AA obj;
};

AA A::obj = {0};     // OK


template<typename T>
class B{
public:
   struct BB{
      T data[8];
   };
   static BB obj;
};

template<typename T>
BB B::obj = {0};       //'BB' - declaration without type    




void OnStart(){  
   ArrayPrint(A::obj.data);
   //ArrayPrint(BB<int>::obj.data);
}


Actualmente no es posible utilizar una variable estática declarada dentro de una clase de plantilla.
Con la introducción de un espacio de nombres, ¿se puede obviar esta restricción?

 
Sergey Dzyublik:


Actualmente no es posible utilizar una variable estática declarada dentro de una clase de plantilla.
Con la introducción del espacio de nombres, ¿podría obviarse esta restricción?

No se trata de la variable. No puede ver la clase BB. Tiene que ser tomada fuera de la clase B como template<typename T> class BB;

 
Alexey Navoykov:

No se trata de la variable. No ve la clase BB, necesita ser movida fuera de la clase B comotemplate<typename T>class BB;

El post estaba dirigido a los desarrolladores, que si van a "engañar" el apoyo fuera de la caja.

Una vez más, el problema se refiere a no poder utilizar una variable estática declarada dentro de una clase de plantilla.
¿Qué sugiere hacer en caso de typedef:

 
class A{
public:
   typedef void (*callback_A)();
   static callback_A f_ptr;

};
callback_A A::f_ptr = NULL;                  // Ok


template<typename T>
class B{
public:
   typedef T (*callback_B)();
   static callback_B f_ptr;
};
template<typename T>
callback_B B::f_ptr = NULL;                  //'callback_B' - declaration without type	

void func_A(){PRINT(__FUNCSIG__);}
int func_B(){PRINT(__FUNCSIG__); return 0;}

void OnStart(){  
   A::f_ptr = func_A;
   A::f_ptr();

   //B<int>::f_ptr = func_B;
   //B<int>::f_ptr();
}
Razón de la queja: