Infelizmente, neste momento os tipos de apontadores de funções em MT4/MT5 são muito limitados e não são práticos devido a alguns defeitos: #(não fixado em MT5(build 2060))"Erro de compilação quando se utiliza a mesma assinatura de função repetidamente dentro do typedef". #(não fixado em MT5(build 2060))"Quando se trabalha com typedef, a utilização de uma função modelo com especialização explícita não gera código para essa função modelo".
Tendo em conta a implementação do namespace pendente, por favor considere a implementação de apoio a este comportamento como parte da reparação de defeitos no 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
}
Não há qualquer problema com isto no MT5. Em MT4 não há forma de sobrecarregar a função.
Como escolher entre usar os modelos e anular* ?
Não há uma abordagem especial, é apenas uma questão de intuição
#(não fixado em MT5(build 2060))"Erro de compilação quando se utiliza a mesma assinatura de função repetidamente dentro do typedef".
#(não fixado em MT5(build 2060))"Quando se trabalha com typedef, a utilização de uma função modelo com especialização explícita não gera código para essa função modelo".
Tendo em conta a implementação do namespace pendente, por favor considere a implementação de apoio a este comportamento como parte da reparação de defeitos no próximo C++:
Olá! Por favor, preste atenção ao tema
https://www.mql5.com/ru/forum/314275
Em resumo, o testador calcula uma margem que não corresponde à margem definida nas definições do símboloFórum sobre comércio, sistemas de comércio automatizados e testes estratégicos
Nova versão da plataforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 12:10
Isto é um bug no compilador MT4?Não há qualquer problema com isto no MT5. Em MT4 não há forma de sobrecarregar a função.
Pequeno percalço em MT 4 em MT 5 não verificado...
Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos
Nova versão da plataforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 14:24
Apanhou uma diferença desconhecida entre MT4 e MT5. Isto é um insecto no MT4?Cinco fizeram uma inicialização adequada da estática. No primeiro acesso.
Quatro não o fizeram. E não há como saber quando o faremos.
build 2062: Erro 5305 ao criar um símbolo personalizado.
Em 2060 tudo está bem.
Lembro-me que em MT4 havia uma chave de linha de comando /skipupdate
Existe algo semelhante no MT5? Como posso desactivar as actualizações?
fxsaber:
MT4 é chamado, MT5 não é.
Parece que se está a compilar com um compilador antigo. Compilar com um moderno (vindo com o MT5) e tudo ficará bem.
Compilado até 1966. Testado 2062 em MT4 - funciona correctamente. Obrigado!
É uma pena que não haja maneira de vencer isto.