Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
1. new-Operator gibt einen Zeiger zurück, natürlich haben die Entwickler ein Chaos mit impliziten Dereferenzierung gemacht, so dass Ihre Version funktioniert, aber es ist besser, nicht auf undokumentierte Dinge aufhängen.
2. Natürlich haben wir nicht C++, aber es ist sehr ähnlich, so dass Initialisierungslisten (ich weiß nicht, über die Effizienz) koscher sind.
Überprüft, ja, Ihre Option funktioniert, und logischerweise ist sie korrekter:
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategie_1::Strategie_1
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategie_2::Strategie_2
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategie_1::Algorithmus
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategie_2::Algorithmus
2019.08.31 22:07:35.197 tst (EURUSD,H1) Strategie_1::Algorithmus
Der Zeiger und das bei der Initialisierung erzeugte Objekt sind nicht verloren gegangen, und die Methode in der Schnittstelle hat die Methoden der Klassen 1 und 2 nicht ersetzt - alles scheint wie geplant zu funktionieren
Wie kann ich sich wiederholende Codeabschnitte während der Initialisierung vermeiden? - im Konstruktor können Sie nicht
Wie kann ich sich wiederholende Codeabschnitte während der Initialisierung vermeiden? - im Konstruktor, können Sie nicht
Anstelle der Schnittstelle machen Sie eine normale Klasse. Dort setzt du *m ein und machst die Methode bool SomeMethod {if (CheckPointer(m)) return false; m=new...; return true;}
Nein, ich brauche die interfes - es ist sehr cool, dass ich nicht brauchen, um alles bei jedem Tick zu ziehen - ich werde einen Aufruf einer Strategie pro einen Tick machen - im Allgemeinen Ich mag Konfiguration von all dies so weit, es scheint, es war notwendig, um mein Problem auf diese Weise zu lösen:
Ich habe mein Beispiel ein wenig verändert - es funktioniert, aber es sollte so aussehen:
aber wenn ich den Körper der MethodeCStrategy::Algorithm(void) entferne, tritt ein Fehler auf: 'Algorithm' -die Funktion muss einen Körper haben
Warum ist es ein Fehler? - weil ich die Methode CStrategy::Algorithm(void) mit dem Modifikator virtual deklariere
Ich habe mein Beispiel ein wenig verändert - es funktioniert, aber es sollte so aussehen:
aber wenn ich den Körper der Methode CStrategy::Algorithm(void) entferne, tritt ein Fehler auf: 'Algorithm' - die Funktion muss einen Körper haben
Warum ist es ein Fehler? - weil ich die Methode CStrategy::Algorithm(void) mit dem Modifikator virtual deklariere
virtual void Algoritm()=0;
Nein, auch das wird nicht funktionieren. Wenn Sie eine Abstraktion deklarieren, seien Sie so freundlich, sie zu implementieren.
Ich denke, dass der Compiler die Methode Algorithm() aus der Schnittstelle und die deklarierte virtuelle void Algorithm() wegen des virtuellen Modifikators als unterschiedliche Methoden ansieht
Eine abstrakte Methode muss in Nachkommen implementiert werden. Noch einmal: Es besteht keine Notwendigkeit, sie zu implementieren.
Ich brauche Schnittstellen, weil es für mich bequem ist, unterschiedliches Verhalten für 6 Strategien abhängig von den Einstellungen des Expert Advisors zu deklarieren (es gibt nicht so viele Strategien, aber die Forschung der Auftragssysteme)
gerade jetzt:
Ich möchte den Hauptteil der Algorithm()-Methoden minimieren. Wenn ich die Basisklasse richtig schreibe - in meinem Beispiel die Klasse CStrategy -, dann wird der Algorithmus() selbst höchstens 5-10 Zeilen enthalten
Wie soll ich diesen Code ohne eine Schnittstelle schreiben? - Jetzt ist alles kurz und es wird nur noch übrig sein, die Algorithmen selbst Strategien jeden Tick oder weniger häufig zu ziehen
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже