Lamentablemente, por el momento los tipos de punteros de función en MT4/MT5 son muy limitados y no son prácticos debido a algunos defectos: #(no corregido en MT5(build 2060))"Error de compilación al usar la misma firma de función repetidamente dentro de typedef". #(no arreglado en MT5(build 2060))"Cuando se trabaja con typedef, el uso de una función de plantilla con especialización explícita no genera código para esa función de plantilla".
En vista de la implementación pendiente del espacio de nombres, por favor considere implementar el soporte para este comportamiento como parte de las correcciones de defectos en el próximo C++:
//#include <iostream>template<typename T>
class A{
public:
typedefvoid (*callback)(T&); //class namespace for function pointer type
callback f_ptr;
T data;
};
template<typename T>
class B{
public:
typedefvoid (*callback)(T&); //class namespace for function pointer type
callback f_ptr;
};
template<typename T>
void func(T& value){
++value;
}
voidOnStart(){
//int main(){
A<int> a;
B<int> b;
a.f_ptr = func<int>; // automatic code generation of templates functions
b.f_ptr = a.f_ptr; // assignment operation for function pointers with the same function signatures and different function pointer types.int x = 1;
b.f_ptr(x);
printf("%d\r\n", x); //2printf("%d\r\n", b.f_ptr == a.f_ptr); //1 // equal operation for function pointers with the same function signatures and different function pointer types.
}
#property strictvoid Func( int &[] ) {}
void Func( int &[][2] ) {} // 'Func' - function already defined and has bodyvoidOnStart()
{
int Array1[];
int Array2[][2];
Func(Array1);
Func(Array2); // 'Array2' - invalid array access
}
No hay ningún problema con esto en MT5. En MT4 no hay forma de sobrecargar la función.
¿Cómo elegir entre utilizar plantillas y void*?
No hay un enfoque especial, es sólo una cuestión de intuición
#(no corregido en MT5(build 2060))"Error de compilación al usar la misma firma de función repetidamente dentro de typedef".
#(no arreglado en MT5(build 2060))"Cuando se trabaja con typedef, el uso de una función de plantilla con especialización explícita no genera código para esa función de plantilla".
En vista de la implementación pendiente del espacio de nombres, por favor considere implementar el soporte para este comportamiento como parte de las correcciones de defectos en el próximo C++:
Hola! Por favor, preste atención al tema
https://www.mql5.com/ru/forum/314275
En pocas palabras, el comprobador calcula un margen que no coincide con el establecido en la configuración del símboloForo sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Nueva versión de la plataforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 12:10
¿Es un error del compilador de MT4?No hay ningún problema con esto en MT5. En MT4 no hay forma de sobrecargar la función.
Ligero percance en MT 4 en MT 5 no comprobado...
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Nueva versión de la plataforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 14:24
Captó una diferencia desconocida entre MT4 y MT5. ¿Es un error en MT4?Cinco ha hecho una inicialización adecuada de la estática. En el primer acceso.
Cuatro no lo hicieron. Y no se sabe cuándo lo haremos.
build 2062: Error 5305 al crear un símbolo personalizado.
En 2060 todo está bien.
Recuerdo que en MT4 había una clave de línea de comandos /skipupdate
¿Hay algo similar en MT5? ¿Cómo puedo desactivar las actualizaciones?
fxsaber:
MT4 se llama, MT5 no.
Parece que estás compilando con un compilador antiguo. Compila con uno moderno (que viene con MT5) y todo irá bien.
Compilado hasta 1966. Probado 2062 en MT4 - funciona correctamente. Gracias.
Es una pena que no haya forma de superar esto.