Leider sind die Funktionszeigertypen in MT4/MT5 zur Zeit sehr begrenzt und aufgrund einiger Mängel nicht praktikabel: #(nicht behoben in MT5(build 2060))"Kompilierungsfehler bei wiederholter Verwendung der gleichen Funktionssignatur innerhalb von typedef". #(nicht behoben in MT5(build 2060))"Bei der Arbeit mit typedef wird bei der Verwendung einer Vorlagenfunktion mit expliziter Spezialisierung kein Code für diese Vorlagenfunktion generiert".
In Anbetracht der anstehenden Namespace-Implementierung sollten Sie in Erwägung ziehen, die Unterstützung für dieses Verhalten als Teil der Fehlerkorrekturen in der nächsten C++ zu implementieren:
//#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
}
Im MT5 gibt es damit kein Problem. In MT4 gibt es keine Möglichkeit, die Funktion zu überladen.
Alexey Navoykov: Sieht so aus, als ob Sie mit einem alten Compiler kompilieren. Kompilieren Sie mit einem modernen Compiler (der mit MT5 kommt) und alles wird gut sein.
Zusammengestellt bis 1966. Versucht 2062 in MT4 - funktioniert korrekt. Ich danke Ihnen!
Wie wählt man zwischen der Verwendung von Vorlagen und void*?
Es gibt keinen speziellen Ansatz, es ist nur eine Frage der Intuition.
#(nicht behoben in MT5(build 2060))"Kompilierungsfehler bei wiederholter Verwendung der gleichen Funktionssignatur innerhalb von typedef".
#(nicht behoben in MT5(build 2060))"Bei der Arbeit mit typedef wird bei der Verwendung einer Vorlagenfunktion mit expliziter Spezialisierung kein Code für diese Vorlagenfunktion generiert".
In Anbetracht der anstehenden Namespace-Implementierung sollten Sie in Erwägung ziehen, die Unterstützung für dieses Verhalten als Teil der Fehlerkorrekturen in der nächsten C++ zu implementieren:
Hallo! Bitte beachten Sie das Thema
https://www.mql5.com/ru/forum/314275
Kurz gesagt, das Prüfgerät berechnet einen Spielraum, der nicht mit dem in den Symboleinstellungen festgelegten Spielraum übereinstimmtForum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Neue Version der Plattform MetaTrader 4 build 1170
fxsaber, 2019.05.28 12:10
Ist dies ein Fehler im MT4-Compiler?Im MT5 gibt es damit kein Problem. In MT4 gibt es keine Möglichkeit, die Funktion zu überladen.
Kleines Missgeschick in MT 4 in MT 5 nicht überprüft...
Forum zum Thema Handel, automatische Handelssysteme und Strategietests
Neue Version der Plattform MetaTrader 4 build 1170
fxsaber, 2019.05.28 14:24
Ich habe einen ungewohnten Unterschied zwischen MT4 und MT5 entdeckt. Ist dies ein Fehler in MT4?Five hat eine ordnungsgemäße Initialisierung der Statik vorgenommen. Beim ersten Zugriff.
Vier waren es nicht. Und es ist nicht abzusehen, wann wir das tun werden.
Build 2062: Fehler 5305 beim Erstellen eines benutzerdefinierten Symbols.
Im Jahr 2060 ist alles in Ordnung.
Ich erinnere mich, dass es in MT4 einen Befehlszeilenschlüssel /skipupdate gab
Gibt es etwas Ähnliches im MT5? Wie kann ich Updates deaktivieren?
fxsaber:
MT4 wird aufgerufen, MT5 nicht.
Sieht so aus, als ob Sie mit einem alten Compiler kompilieren. Kompilieren Sie mit einem modernen Compiler (der mit MT5 kommt) und alles wird gut sein.
Zusammengestellt bis 1966. Versucht 2062 in MT4 - funktioniert korrekt. Ich danke Ihnen!
Es ist schade, dass es keine Möglichkeit gibt, das zu übertreffen.