Questions sur la POO dans MQL5 - page 62

 
Dmitry Fedoseev:

Enfin quelque chose de très intéressant. C'est le modèle "Steam Train" ?

Dima, tu ne traînes pas ici, calme-toi)))

 
Vladimir Simakov:

D'une manière ou d'une autre, vous ne le faites pas correctement).

PS corrigé

Sorcier !

ça marche !

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

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

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


Donc, en général, grâce à cette méthode simple, je peux télécharger des objets simples en json, et non pas via des données binaires comme je le faisais auparavant.

MERCI !

 
Vladimir Simakov:

Dima, vous ne tirez pas les ficelles ici, calmez-vous)))).

Quel mégalomane vous avez ici dans votre club. Et qui en parlerait ici, après ce gardien. Tu ne penses pas être le seul à savoir lire ?

Il s'agit plutôt du fait que vous n'êtes pas en mesure de maîtriser toute la sagesse. Vous coupez un petit morceau à la fois, puis vous vous donnez en spectacle en public avec votre mégalomanie. Fier de son élitisme de cette connaissance pourrait être il ya 15 ans, mais maintenant les livres sur le sujet et beaucoup de cours.

 
Igor Makanu:

Sorcier !

ça marche !


cool ! en général, de cette manière, il est possible de décharger des objets non compliqués en json, et non comme je le faisais habituellement - à travers des données binaires

MERCI !

C'est comme ça que ça devrait être, le retour à la ligne n'est pas nécessaire, c'était pour la clarté :

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

J'aimerais également ajouter des méthodes pour les tableaux et les structures de tableaux (je suis trop paresseux). Et, en principe, peut être exécuté dans kodobase.

Je présente, qui sera le premier dans le temps.

PS : Je vais y aller et vérifier))))

 
Vladimir Simakov:

Voici à quoi cela devrait ressembler, le retour à la ligne n'est pas nécessaire, c'était pour la clarté :

Il faudrait également ajouter des méthodes pour les tableaux et les tableaux de structures (paresseux). Et, en principe, peut être exécuté dans kodobase.

Je présente, qui sera le premier dans le temps.

PS : Je vais y aller et vérifier))))

le poster dans QB

imho, la bonne chose !

json est un format bien établi, il est pratique pour moi de pouvoir avoir des classes 100% one-to-one en C# et en MQL, et d'organiser le chargement des modèles en cours d'exécution - jusqu'à présent, il y a un problème dans ce sens.

et passer des données binaires ici et là.... Eh bien, ce n'est pas une nouveauté et seule une personne paresseuse peut le faire))).


ZS : Python semble également fonctionner avec json sans aucun problème, je ne sais pas ce que Metaquotes a donné aux pythonistes avec ses nouvelles capacités MT5 - juste pomper des données historiques ? - quel est l'intérêt ? ce n'était pas un problème, imho

 
Vladimir Simakov:

Voici à quoi cela devrait ressembler, le retour à la ligne n'est pas nécessaire, c'était pour la clarté :

Il faudrait également ajouter des méthodes pour les tableaux et les tableaux de structures (paresseux). Et, en principe, peut être exécuté dans kodobase.

Je présente, qui sera le premier dans le temps.

PS : Je vais entrer et vérifier))))

Et à quelle vitesse une telle création d'objet fonctionne-t-elle ? A quel point son application est-elle opportune ? Ne serait-il pas préférable d'utiliser une autre macro pour la finition ? Si le but est bien sûr d'impressionner, alors l'effet est sans aucun doute mortel.

 
Vladimir Simakov:

Voici à quoi cela devrait ressembler, le retour à la ligne n'est pas nécessaire, c'était pour la clarté :

vérifié dans VS , aucun problème via le presse-papiers {"test":{"a":10, "b":0.369, "t" : "Hi"}, "a":123456789, "b":99999999999999}

mis dans l'éditeur :

 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:

À quelle vitesse ce type de création d'objets fonctionne-t-il ? Quelle est son utilité ? Ne serait-il pas préférable d'utiliser une macro de plus pour la finition ? Bien sûr, si l'objectif est de faire une grande impression, l'effet est sans aucun doute mortel.

Si vous en avez besoin rapidement, exécutez simplement le binaire sans aucune réserve. Une chaîne de caractères est un stoka - vous pouvez, bien sûr, allouer de la mémoire pour N caractères à la fois. Ici, les seuls frais généraux sont
text==NULL?"{":","

Mais c'est justement cette chose que le compilateur est obligé d'optimiser et de supprimer. C'est pour cela que text(NULL) est initialisé et non text("{").

 
Vladimir Simakov:
Et si vous en avez besoin rapidement, il suffit d'exécuter le binaire sans problème. Une chaîne de caractères est un stoka - vous pouvez, bien sûr, allouer de la mémoire pour N caractères à la fois. Ici, les seuls frais généraux sont

Mais c'est exactement ce que le compilateur est obligé d'optimiser et de supprimer. C'est pourquoi text(NULL) est initialisé, et non text("{")

Je veux dire ceci : (CJSon()).V..

 
Dmitry Fedoseev:

Je veux dire ceci : (CJSon()).V...

Quel est le problème, allouer 12 octets de mémoire sur la pile, je ne sais pas exactement ce qu'est un objet chaîne ?