Perguntas sobre OOP em MQL5 - página 62

 
Dmitry Fedoseev:

Finalmente, algo muito interessante. É o padrão "Trem a Vapor"?

Dima, você não está se arrastando aqui, acalme-se))))

 
Vladimir Simakov:

De alguma forma, você não está fazendo direito)

PS Corrigido

Feiticeiro!

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) "teste":{

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

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

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) "teste":{

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

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

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


Então, em geral, desta maneira fácil posso baixar objetos simples para o json, e não através de dados binários, como eu fazia antes

OBRIGADO!

 
Vladimir Simakov:

Dima, você não está dando nenhum soco aqui, acalme-se))))

Que megalômano você tem aqui no seu clube. E quem falaria sobre isso aqui, depois daquele guardião. Você não acha que é o único que sabe ler?

É mais uma questão de você não ser capaz de dominar completamente toda a sabedoria. Você corta um pedacinho de cada vez e depois faz um show em público com sua megalomania. Orgulhoso de seu elitismo a partir deste conhecimento poderia ser há 15 anos, mas agora livros sobre o assunto e muitos cursos.

 
Igor Makanu:

Feiticeiro!

funciona!


cool! em geral, desta forma, é possível descarregar objetos simples para a json, não como eu costumava fazer - através de dados binários

OBRIGADO!

É assim que deve parecer, a quebra de linha é desnecessária, foi para maior clareza:

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

Também gostaria de acrescentar métodos para arrays e estruturas de array (sou muito preguiçoso). E, em princípio, pode ser executado em kodobase.

Eu apresento, que será o primeiro no tempo.

PS: Eu vou entrar e verificar))))

 
Vladimir Simakov:

É assim que deve parecer, a quebra de linha é desnecessária, foi para maior clareza:

E também devem ser acrescentados métodos para matrizes e matrizes de estruturas (preguiçosos). E, em princípio, é possível correr em kodobase.

Eu apresento, que será o primeiro no tempo.

PS: Eu vou entrar e conferir))))

postar em QB

imho, a coisa certa!

json é um formato bem estabelecido, é conveniente para mim poder ter 100% de aulas individuais em C# e em MQL , e organizar o carregamento de modelos em tempo de execução - até agora há um obstáculo nesta direção

e passar dados binários aqui e ali.... Bem, não é uma novidade e só uma pessoa preguiçosa pode fazer isso))))


ZS: Python também parece trabalhar com a json sem problemas, não sei o que Metaquotes tem dado aos pythonistas com suas novas capacidades MT5 - apenas bombear dados históricos? - qual é o objetivo? não foi um problema, imho

 
Vladimir Simakov:

É assim que deve parecer, a quebra de linha é desnecessária, foi para maior clareza:

E também devem ser acrescentados métodos para matrizes e matrizes de estruturas (preguiçosos). E, em princípio, pode ser executado em kodobase.

Eu apresento, que será o primeiro no tempo.

PS: Eu vou entrar e verificar))))

E com que rapidez tal criação de objetos funciona? Qual o grau de conveniência de sua aplicação? Não seria melhor usar outra macro para acabamento? Se a tarefa é impressionar, então sem dúvida o efeito é mortal.

 
Vladimir Simakov:

É assim que deve parecer, a quebra de linha é desnecessária, foi para maior clareza:

verificado em VS , sem problemas via clipboard {"test":{"a":10, "b":0.369, "t": "Hi"}, "a":123456789, "b":9999999999999999}

colocar no 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:

Com que rapidez este tipo de criação de objetos funciona? Qual é a sua utilidade? Não seria melhor usar mais uma macro para o acabamento? É claro, se a tarefa é causar uma grande impressão, o efeito é sem dúvida mortal.

Se você precisar dele rapidamente, basta executar o binário sem nenhuma advertência. Uma corda é um stoka - é claro, você pode alocar memória para N caracteres de uma só vez. Aqui, a única despesa geral é
text==NULL?"{":","

Mas é exatamente isso que o compilador é obrigado a otimizar e remover. É para isso que o texto(NULL) é inicializado e não o texto("{").

 
Vladimir Simakov:
E se você precisar dele rapidamente, basta rodar o binário sem nenhum incômodo. Uma corda é um stoka - é claro, você pode alocar memória para N caracteres de uma só vez. Aqui, a única despesa geral é

Mas é exatamente isso que o compilador é obrigado a otimizar e remover. É por isso que o texto(NULL) é inicializado, não o texto("{")

Quero dizer isto: (CJSon()).V..

 
Dmitry Fedoseev:

Quero dizer isto: (CJSon()).V...

Qual é o problema, alocar 12 bytes de memória na pilha, eu não sei exatamente o que é um objeto de corda?