Fragen zu OOP in MQL5 - Seite 62

 
Dmitry Fedoseev:

Endlich etwas sehr Interessantes. Ist es das Muster "Dampfzug"?

Dima, du ziehst hier nicht, beruhige dich)))

 
Vladimir Simakov:

Irgendwie machst du es nicht richtig)

PS Korrigiert

Zauberer!

Es funktioniert!

void OnStart(){
   CTest test;
   Print("1.-----------------------");
   Print(test.JSon());
   Print("2.-----------------------");
   test.a = 123456789;
   test.b = 9999999999999999;
   Print(test.JSon());
 }

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) 1.-----------------------

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) {

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "test":{

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "a":10,

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "b":0.369,

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "t": "Hallo"

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) }

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "a":555,

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "b":-9223372036854775808

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) }

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) 2.-----------------------

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) {

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "test":{

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "a":10,

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "b":0.369,

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "t": "Hallo"

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) }

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "a":123456789

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) "b":9999999999999999

2020.05.21 20:56:34.192 tst_json (EURUSD,H1) }


Im Allgemeinen kann ich auf diese einfache Weise einfache Objekte in json herunterladen, und nicht über binäre Daten, wie ich es vorher getan habe

DANKESCHÖN!

 
Vladimir Simakov:

Dima, du machst hier keine halben Sachen, beruhige dich))))

Was für einen Größenwahnsinnigen haben Sie hier in Ihrem Club. Und wer würde hier darüber sprechen, nach diesem Torwart. Glaubst du nicht, dass du der Einzige bist, der lesen kann?

Es geht eher darum, dass Sie nicht in der Lage sind, die ganze Weisheit zu beherrschen. Sie hacken ein Stückchen nach dem anderen ab und ziehen dann in der Öffentlichkeit eine Show mit Ihrem Größenwahn ab. Stolz auf seine Elitismus aus diesem Wissen konnte vor 15 Jahren, aber jetzt Bücher zu diesem Thema und eine Menge von Kursen.

 
Igor Makanu:

Zauberer!

Es funktioniert!


cool! im Allgemeinen, auf diese Weise ist es möglich, unkomplizierte Objekte zu json entladen, nicht wie ich in der Regel tat - durch binäre Daten

DANKESCHÖN!

So sollte es aussehen, der Zeilenumbruch ist unnötig, er diente der Übersichtlichkeit:

#define COMMA (text==NULL?"{":",")
#define VALUE(dVal) Push(#dVal,dVal)
#define STRUCT(dVal) PushStruct(#dVal,dVal.JSon())

class CJSon{
   string text;
public:
   CJSon():text(NULL){}
   CJSon* Push(string key,string value) {text+=COMMA+"\""+key+"\":\""+value+"\""; return &this;}
   CJSon* PushStruct(string key,string value) {text+=COMMA+"\""+key+"\":"+value; return &this;}
   CJSon* Push(string key,long value)   {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   CJSon* Push(string key,double value) {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   string Finish()   {return text+="}";}
};

Ich würde auch gerne Methoden für Arrays und Array-Strukturen hinzufügen (ich bin zu faul). Und kann im Prinzip in kodobase ausgeführt werden.

Ich stelle vor, wer der erste in der Zeit sein wird.

PS: Ich gehe rein und prüfe))))

 
Vladimir Simakov:

So sollte es aussehen, der Zeilenumbruch ist unnötig, er diente der Übersichtlichkeit:

Und auch Methoden für Arrays und Arrays von Strukturen sollten hinzugefügt werden (lazy). Und im Prinzip ist es möglich, es in kodobase laufen zu lassen.

Ich stelle vor, wer der erste in der Zeit sein wird.

PS: Ich gehe rein und schaue es mir an))))

in QB veröffentlichen

imho, das Richtige!

json ist ein gut etabliertes Format, es ist praktisch für mich in der Lage sein, 100% eins-zu-eins-Klassen in C # und in MQL haben, und das Laden von Modellen in Laufzeit zu organisieren - so weit gibt es ein Problem in diese Richtung

und übergeben Sie hier und dort binäre Daten.... Nun, es ist keine Neuheit und nur eine faule Person kann es tun)))


ZS: Python scheint auch mit json ohne Probleme zu funktionieren, ich weiß nicht, was Metaquotes den Pythonisten mit seinen neuen MT5-Fähigkeiten gegeben hat - nur historische Daten auspumpen? - Was soll das bringen? Es war kein Problem, finde ich.

 
Vladimir Simakov:

So sollte es aussehen, der Zeilenumbruch ist unnötig, er diente der Übersichtlichkeit:

Und auch Methoden für Arrays und Arrays von Strukturen sollten hinzugefügt werden (lazy). Und kann im Prinzip in kodobase ausgeführt werden.

Ich stelle vor, wer der erste in der Zeit sein wird.

PS: Ich gehe rein und prüfe))))

Und wie schnell funktioniert eine solche Objekterstellung? Wie zweckmäßig ist seine Anwendung? Wäre es nicht besser, ein anderes Makro für die Nachbearbeitung zu verwenden? Wenn die Aufgabe natürlich darin besteht, zu beeindrucken, dann ist der Effekt zweifelsohne tödlich.

 
Vladimir Simakov:

So sollte es aussehen, der Zeilenumbruch ist unnötig, er diente der Übersichtlichkeit:

in VS geprüft, kein Problem über Zwischenablage {"test":{"a":10, "b":0.369, "t": "Hi"}, "a":123456789, "b":99999999999999}

in den Editor eingeben:

 public class Rootobject
    {
        public Test test { get; set; }
        public int a { get; set; }
        public long b { get; set; }
    }

    public class Test
    {
        public int a { get; set; }
        public float b { get; set; }
        public string t { get; set; }
    }
 
Dmitry Fedoseev:

Wie schnell funktioniert diese Art der Objekterstellung? Wie nützlich ist sie? Wäre es nicht besser, ein weiteres Makro für das Finish zu verwenden? Natürlich, wenn es darum geht, einen großen Eindruck zu hinterlassen, ist der Effekt zweifellos tödlich.

Wenn Sie es schnell brauchen, führen Sie einfach die Binärdatei ohne Vorbehalte aus. Ein String ist ein Stoka - man kann natürlich Speicher für N Zeichen auf einmal zuweisen. Die einzigen Gemeinkosten sind hier
text==NULL?"{":","

Aber genau das ist es, was der Compiler optimieren und entfernen muss. Hierfür wird text(NULL) initialisiert und nicht text("{").

 
Vladimir Simakov:
Und wenn Sie es schnell brauchen, führen Sie einfach das Binärprogramm aus. Ein String ist ein Stoka - man kann natürlich Speicher für N Zeichen auf einmal zuweisen. Die einzigen Gemeinkosten sind hier

Aber genau das ist es, was der Compiler optimieren und entfernen muss. Aus diesem Grund wird text(NULL) initialisiert, nicht text("{")

Ich meine dies: (CJSon()).V..

 
Dmitry Fedoseev:

Ich meine dies: (CJSon()).V...

Was ist das Problem, 12 Byte Speicher auf dem Stack zuzuweisen, ich weiß nicht genau, was ein String-Objekt ist?