Domande su OOP in MQL5 - pagina 62

 
Dmitry Fedoseev:

Finalmente qualcosa di molto interessante. È il modello "Steam Train"?

Dima, non stai trascinando qui, calmati)))

 
Vladimir Simakov:

In qualche modo non lo stai facendo bene)

PS Corretto

Mago!

funziona!

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": "Hi"

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": "Hi"

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) }


Quindi, in generale, in questo modo semplice posso scaricare oggetti semplici in json, e non tramite dati binari come facevo prima

GRAZIE!

 
Vladimir Simakov:

Dima, non stai tirando pugni qui, calmati))))

Che megalomane avete qui nel vostro club. E chi ne parlerebbe qui, dopo quel guardiano. Non pensi di essere l'unico che sa leggere?

È più una questione di non essere in grado di padroneggiare pienamente tutta la saggezza. Tagliate un pezzetto alla volta e poi date spettacolo in pubblico con la vostra megalomania. Orgoglioso del suo elitarismo da questa conoscenza potrebbe essere 15 anni fa, ma ora libri sul tema e un sacco di corsi.

 
Igor Makanu:

Mago!

funziona!


figo! in generale, in questo modo, è possibile scaricare oggetti non complicati in json, non come ho fatto di solito - attraverso dati binari

GRAZIE!

Ecco come dovrebbe apparire, l'interruzione di linea non è necessaria, era per chiarezza:

#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+="}";}
};

Vorrei anche aggiungere metodi per gli array e gli array di strutture (lazy). E, in linea di principio, può essere eseguito in kodobase.

Vi presento, chi sarà il primo nel tempo.

PS: entrerò e controllerò))))

 
Vladimir Simakov:

Questo è come dovrebbe apparire, l'interruzione di linea non è necessaria, era per chiarezza:

E anche i metodi per gli array e gli array di strutture dovrebbero essere aggiunti (lazy). E, in linea di principio, può essere eseguito in kodobase.

Vi presento, chi sarà il primo nel tempo.

PS: andrò a controllare ))))

pubblicarlo in QB

imho, la cosa giusta!

json è un formato consolidato, è conveniente per me essere in grado di avere classi al 100% one-to-one in C# e in MQL, e di organizzare il caricamento dei modelli in runtime - finora c'è un intoppo in questa direzione

e passare dati binari qui e lì.... Beh, non è una novità e solo una persona pigra può farlo)))


ZS: Python sembra funzionare anche con json senza problemi, non so cosa Metaquotes ha dato ai pitonisti con le sue nuove funzionalità MT5 - solo pompare i dati storici? - Qual è il punto? Non era nemmeno un problema, imho

 
Vladimir Simakov:

Questo è come dovrebbe apparire, l'interruzione di linea non è necessaria, era per chiarezza:

E anche i metodi per gli array e gli array di strutture dovrebbero essere aggiunti (lazy). E, in linea di principio, è possibile eseguire in kodobase.

Vi presento, chi sarà il primo nel tempo.

PS: vado a controllare))))

E quanto velocemente funziona una tale creazione di oggetti? Quanto è opportuna la sua applicazione? Non sarebbe meglio usare un'altra macro per la finitura? Se ovviamente il compito è quello di fare impressione, allora senza dubbio l'effetto è micidiale.

 
Vladimir Simakov:

Questo è come dovrebbe apparire, l'interruzione di linea non è necessaria, era per chiarezza:

controllato in VS, nessun problema tramite gli appunti {"test":{"a":10, "b":0.369, "t": "Hi"}, "a":123456789, "b":9999999999999999}

mettere nell'editor:

 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:

Quanto velocemente funziona questo tipo di creazione di oggetti? Quanto è utile? Non sarebbe meglio usare una macro in più per la finitura? Certo, se il compito è quello di fare una grande impressione, l'effetto è senza dubbio micidiale.

Se ne avete bisogno rapidamente, eseguite semplicemente il binario senza alcun avvertimento. Una stringa è una stoka - si può, ovviamente, allocare memoria per N caratteri alla volta. Qui, l'unico overhead è
text==NULL?"{":","

Ma è proprio questa la cosa che il compilatore è obbligato a ottimizzare e rimuovere. Questo è ciò per cui viene inizializzato text(NULL) e non text("{").

 
Vladimir Simakov:
E se ne avete bisogno velocemente, basta eseguire il binario senza alcun problema. Una stringa è una stoka - si può, ovviamente, allocare memoria per N caratteri alla volta. Qui, l'unico overhead è

Ma questo è esattamente ciò che il compilatore è obbligato a ottimizzare e rimuovere. Ecco perché viene inizializzato text(NULL), non text("{")

Intendo questo: (CJSon()).V..

 
Dmitry Fedoseev:

Intendo questo: (CJSon()).V...

Qual è il problema, allocare 12 byte di memoria sullo stack, non so esattamente cosa sia un oggetto stringa?

Motivazione: