Preguntas sobre POO en MQL5 - página 62

 
Dmitry Fedoseev:

Por fin algo muy interesante. ¿Es un modelo de "Tren de Vapor"?

Dima, no estás arrastrando aquí, cálmate))

 
Vladimir Simakov:

De alguna manera no lo estás haciendo bien)

PS Corregido

¡Mago!

¡funciona!

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

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


Así que, en general, de esta manera fácil puedo descargar objetos simples en json, y no a través de datos binarios como solía hacer antes

¡GRACIAS!

 
Vladimir Simakov:

Dima, no estás tirando de la cuerda, cálmate))))

Qué megalómano tienes en tu club. Y quién hablaría de ello aquí, después de ese guardián. ¿No crees que eres el único que sabe leer?

Es más bien una cuestión de que no eres capaz de dominar toda la sabiduría. Cortas un trocito a la vez y luego haces un espectáculo en público con tu megalomanía. Orgulloso de su elitismo de este conocimiento podría ser hace 15 años, pero ahora los libros sobre el tema y un montón de cursos.

 
Igor Makanu:

¡Mago!

¡funciona!


genial! en general, de esta manera, es posible descargar objetos simples a json, no como solía hacer - a través de datos binarios

¡GRACIAS!

Así es como debería quedar, el salto de línea es innecesario, era para mayor claridad:

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

También me gustaría añadir métodos para matrices y estructuras de matrices (soy demasiado vago). Y, en principio, se puede ejecutar en kodobase.

Presento, que será el primero en el tiempo.

PS: Voy a entrar y comprobar))))

 
Vladimir Simakov:

Así es como debería verse, el salto de línea es innecesario, fue para la claridad:

Y también habría que añadir métodos para arrays y arrays de estructuras (lazy). Y, en principio, se puede ejecutar en kodobase.

Presento, que será el primero en el tiempo.

P.D.: Voy a entrar a comprobarlo))))

publicarlo en QB

¡imho, lo correcto!

json es un formato bien establecido, es conveniente para mí ser capaz de tener 100% de las clases de uno a uno en C # y en MQL , y para organizar la carga de los modelos en tiempo de ejecución - hasta ahora hay un obstáculo en esta dirección

y pasar datos binarios aquí y allá.... Bueno, no es una novedad y sólo los perezosos pueden hacerlo)))


ZS: Python también parece funcionar con json sin problemas, no sé qué le ha dado Metaquotes a los pythonistas con sus nuevas capacidades de MT5 - ¿sólo bombear datos históricos? - ¿Qué sentido tiene? Ni siquiera era un problema, en mi opinión.

 
Vladimir Simakov:

Así es como debería verse, el salto de línea es innecesario, fue para la claridad:

Y también habría que añadir métodos para arrays y arrays de estructuras (lazy). Y, en principio, se puede ejecutar en kodobase.

Presento, que será el primero en el tiempo.

P.D.: Entraré y comprobaré))))

¿Y con qué rapidez funciona la creación de un objeto de este tipo? ¿Qué tan expedita es su aplicación? ¿No sería mejor utilizar otra macro para el acabado? Si por supuesto la tarea es impresionar, entonces sin duda el efecto es matador.

 
Vladimir Simakov:

Así es como debería verse, el salto de línea es innecesario, fue para la claridad:

comprobado en VS , sin problemas a través del portapapeles {"test":{"a":10, "b":0.369, "t": "Hi"}, "a":123456789, "b":99999999999999}

poner en el 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:

¿A qué velocidad funciona este tipo de creación de objetos? ¿Qué utilidad tiene? ¿No sería mejor utilizar una macro más para el acabado? Por supuesto, si la tarea es causar una gran impresión, el efecto es indudablemente mortal.

Si lo necesitas rápidamente, simplemente ejecuta el binario sin ninguna advertencia. Una cadena es un stoka - puede, por supuesto, asignar memoria para N caracteres a la vez. Aquí, la única sobrecarga es
text==NULL?"{":","

Pero es esto mismo lo que el compilador está obligado a optimizar y eliminar. Para esto se inicializa text(NULL) y no text("{").

 
Vladimir Simakov:
Y si lo necesitas rápido, sólo tienes que ejecutar el binario sin ninguna molestia. Una cadena es un stoka - puede, por supuesto, asignar memoria para N caracteres a la vez. Aquí, la única sobrecarga es

Pero esto es exactamente lo que el compilador está obligado a optimizar y eliminar. Por eso se inicializa text(NULL) y no text("{")

Me refiero a esto: (CJSon()).V..

 
Dmitry Fedoseev:

Me refiero a esto: (CJSon()).V...

¿Cuál es el problema, asignar 12 bytes de memoria en la pila, no sé exactamente lo que es un objeto de cadena?

Razón de la queja: