Sfortunatamente, al momento i tipi di puntatori a funzione in MT4/MT5 sono molto limitati e non pratici a causa di alcuni difetti: #(non corretto in MT5(build 2060))"Errore di compilazione quando si usa la stessa firma di funzione ripetutamente all'interno di typedef". #(non corretto in MT5(build 2060))"Quando si lavora con typedef, usare una funzione template con specializzazione esplicita non genera codice per quella funzione template".
In vista dell'implementazione dello spazio dei nomi in sospeso, si prega di considerare l'implementazione del supporto per questo comportamento come parte delle correzioni dei difetti nel prossimo 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
}
Non c'è nessun problema con questo in MT5. In MT4 non c'è modo di sovraccaricare la funzione.
Come si fa a scegliere tra l'uso di template e void*?
Non c'è un approccio speciale, è solo una questione di intuizione
#(non corretto in MT5(build 2060))"Errore di compilazione quando si usa la stessa firma di funzione ripetutamente all'interno di typedef".
#(non corretto in MT5(build 2060))"Quando si lavora con typedef, usare una funzione template con specializzazione esplicita non genera codice per quella funzione template".
In vista dell'implementazione dello spazio dei nomi in sospeso, si prega di considerare l'implementazione del supporto per questo comportamento come parte delle correzioni dei difetti nel prossimo C++:
Ciao! Si prega di prestare attenzione all'argomento
https://www.mql5.com/ru/forum/314275
In poche parole, il tester calcola un margine che non corrisponde a quello impostato nelle impostazioni del simboloForum sul trading, sistemi di trading automatico e test di strategia
Nuova versione della piattaforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 12:10
È un bug nel compilatore MT4?Non c'è nessun problema con questo in MT5. In MT4 non c'è modo di sovraccaricare la funzione.
Piccolo contrattempo in MT 4 in MT 5 non controllato...
Forum sul trading, sistemi di trading automatico e test di strategia
Nuova versione della piattaforma MetaTrader 4 build 1170
fxsaber, 2019.05.28 14:24
Ha colto una differenza sconosciuta tra MT4 e MT5. È un bug in MT4?Cinque ha fatto una corretta inizializzazione della statica. Al primo accesso.
Quattro non l'hanno fatto. E non si sa quando lo faremo.
build 2062: errore 5305 durante la creazione di un simbolo personalizzato.
Nel 2060 tutto va bene.
Ricordo che in MT4 c'era una chiave da linea di comando /skipupdate
C'è qualcosa di simile in MT5? Come posso disabilitare gli aggiornamenti?
fxsaber:
MT4 si chiama, MT5 no.
Sembra che tu stia compilando con un vecchio compilatore. Compila con uno moderno (in arrivo con MT5) e tutto andrà bene.
Compilato fino al 1966. Provato 2062 in MT4 - funziona correttamente. Grazie!
È un peccato che non ci sia un modo per batterlo.