MQL5中的OOP问题 - 页 62

 
Dmitry Fedoseev:

终于有了非常有趣的东西。是 "蒸汽列车 "图案吗?

迪马,你没有在这里拖后腿,冷静点)))。

 
Vladimir Simakov:

不知何故,你做得不对)

纠正的PS

巫师!

它的工作原理!

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

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

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

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


所以,总的来说,通过这种简单的方式,我可以把简单的对象下载到json中,而不是像以前那样通过二进制数据下载。

谢谢你!

 
Vladimir Simakov:

迪马,你在这里没有拔苗助长,冷静点))))

你的俱乐部里有一个多么自大的人啊。而在那个守门员之后,谁会在这里谈论它。你不觉得你是唯一能读懂的人吗?

这更多的是你不能完全掌握所有的智慧的问题。你一次砍掉一小块,然后在公众面前用你的自大狂作秀。骄傲的是它的精英主义,从这个知识可能是15年前,但现在关于这个问题的书籍和很多课程。

 
Igor Makanu:

巫师!

它的工作原理!


酷!一般来说,通过这种方式,可以将不复杂的对象卸载到json中,而不是像我平时那样--通过二进制数据来卸载

谢谢你!

它应该是这样的,断行是不必要的,这是为了清晰。

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

我还想为数组和数组结构添加方法(我太懒了)。而且,原则上可以在kodobase中运行。

我提出,谁将成为时间上的第一人。

PS:我将进去检查))))

 
Vladimir Simakov:

这就是它应该有的样子,换行是不必要的,这是为了清晰。

而且还应该增加数组和结构数组的方法(懒)。而且,原则上可以在kodobase中运行。

我提出,谁将成为时间上的第一人。

PS:我进去看看))))

发布在QB上

我认为,这是正确的事情!

json是一种成熟的格式,对我来说,能够在C#和MQL中拥有100%的一对一的类,并且在运行时组织模型的加载是很方便的--到目前为止,在这个方向上有一个障碍。

并在这里和那里传递二进制数据....好吧,这不是什么新鲜事,只有懒人才能做到)))。


ZS:Python似乎也可以毫无问题地与json一起工作,我不知道Metaquotes用其新的MT5功能给了pythonists什么--只是抽出历史数据?- 这有什么意义呢? 这不是一个问题,我认为

 
Vladimir Simakov:

这就是它应该有的样子,换行是不必要的,这是为了清晰。

而且还应该增加数组和结构数组的方法(懒)。而且,原则上可以在kodobase中运行。

我提出,谁将成为时间上的第一人。

PS:我进去看看))))

那么这样的对象创造 是如何快速运作的呢?它的应用有多大的便利性?用另一个宏来完成不是更好吗? 当然,如果任务是要给人留下印象,那么毫无疑问,效果是致命的。

 
Vladimir Simakov:

这就是它应该有的样子,换行是不必要的,这是为了清晰。

在VS中检查,通过剪贴板没有问题 {"test":{"a":10, "b":0.369, "t": "Hi"}, "a":123456789, "b":9999999999999}.

放在编辑器里。

 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:

这种对象的创建 工作有多快?它有多大作用?多用一个宏来完成不是更好吗? 当然,如果任务是要给人留下深刻的印象,效果无疑是致命的。

如果你需要快速,只需运行二进制,没有任何注意事项。一个字符串是一个stoka--当然,你可以一次为N个字符分配内存。在这里,唯一的开销是
text==NULL?"{":","

但正是这种东西,编译器有义务进行优化和删除。这就是text(NULL)被初始化的原因,而不是text("{")。

 
Vladimir Simakov:
如果你需要快速,只需运行二进制,没有任何麻烦。一个字符串是一个stoka--当然,你可以一次为N个字符分配内存。在这里,唯一的开销是

但这正是编译器有义务优化和删除的内容。这就是为什么text(NULL)被初始化,而不是text("{")。

我的意思是:(CJSon()).V.。

 
Dmitry Fedoseev:

我的意思是:(CJSon()).V...

有什么问题吗?在堆栈中分配12字节的内存,我不知道字符串对象到底是什么?