MQL5中的OOP问题 - 页 80

 
Vladimir Simakov:

我同意))))。这是我的优点。))

在我写作的时候,我已经看到了这一切是如何展开的。

也就是说,不在正面,而在前一个版本的枪口上就可以了吧?

JSONObject * CActor::getJSONObject(const string json)const
{
   JSONParser parser;
   JSONValue  *jv = parser.parse(json);
   if (jv != NULL && jv.isObject() && (EACTOR_TYPE)(((JSONObject *)jv).getInt("ActorType")) == ActorType) return(jv);
   Print(__FUNCTION__ + "parser error, json = ",json);
   delete jv;
   return(NULL);
}
 
Igor Makanu:

在我写这篇文章的时候,一切都转好了。

也就是说,不是在正面,而是在枪口的一面,前面的选项会起作用吧?

这个选项--是的))

只是它有两个隐含的动态广播
 
Vladimir Simakov:

1)突出显示。只在下一行检查)))在lib的创建者的例子中,正好相反,先检查,再投掷)
2)如果JSONObject 有继承人,为什么要放弃?

1) 基本上一个相同的代码在这个主题内讨论了好几天:这里这里这里
事实上,你在用户使用图书馆的一个例子中发现了一个问题--做得好,谢谢你。
然而,你说在使用整个库的逻辑上有问题,但事实上,事实证明,问题涉及一个具体的例子。

2)你在哪里看到 "有些东西应该往下走 "的说法?
不,情况可能更糟--代码可以正常工作,但产生不正确的结果。

 
Sergey Dzyublik:

2)你在哪里看到 "有些东西应该往下走 "的说法?
不,情况可能更糟--代码可以正常工作,但产生不正确的结果。

当然是IMHO,但是如果我在lib中,通过一个基类的指针来引用一个对象时,得到了未定义的行为,应该在库手册中反映出来(有吗?)

 
Sergey Dzyublik:

不,情况可能更糟--代码可以正常工作,但产生不正确的结果。

不太可能,我的例子是一个基类的方法,JSONObject *是执行的结果,它是一个指向解析器的指针,而在子类方法中的json解析本身是用收到的指针发生的,这在我之前提到的问题中是要 "钉住 "的。

有相当多的检查,在建议的例子中,有3个,在派生类 中,每次调用getInt(), getDouble()方法都会发生检查。

 
Vladimir Simakov:

当然是IMHO,但是如果我在lib中,通过一个基类的指针来引用一个对象时,得到了未定义的行为,它应该反映在库的手册中(有吗? 但不应该是这样的)

再说一遍,指针和非指针、手册等与此有什么关系??
在你的例子中,部分LOGIC将从函数中移除,即检查jv.isObject()
这个LOGIC已经被通过dynamic_cast的检查取代。
对于当前版本的库来说,一切都很好,但是,从理论上讲,如果在下一个版本中会有一个新的类,它使用JSONObject 作为基础,而不是你的例子可以正确工作。

 
Sergey Dzyublik:

再说一遍,指针和非指针、手册等与此有什么关系??
在你的例子中,部分LOGIC将从函数中移除,即检查jv.isObject()
这个LOGIC已经被通过dynamic_cast检查所取代。
对于当前版本的库来说,一切都很好,但是,从理论上讲,如果在下一个版本中会有一个新的类,它使用JSONObject 作为基础,而不是你的例子将正确地与它工作。

所以,另一个版本也不能正确地使用它)

 
Andrei Trukhanovich:
没有僭越,mql cast也包括 dynamic_cast。在指针错误的情况下,一切都会倒下。

是吗?在dynamic_cast的情况下,如果你检查结果为NULL,则不会有任何损失。在正常的投掷下,它将立即下降。还是我弄错了?

 
Vladimir Simakov:

当然是IMHO,但是如果在lib中,当通过基类的指针引用一个对象时,我得到了未定义的行为,这应该反映在库的手册中(有吗? 但不应该是这样的)

在职业中应该有一个例外。还有一封给作者的信,因为例外并不是一件好事,只是一个插曲。在mql中没有这样的东西,所以类是在考虑到未来的情况下制定的,有完整的协议。

关于讨论的json - 你只有2个选择,要么遵循作者的风格和解决方案,要么自己做一个分叉。 剩下的就是邪恶了。😉

 
Vladimir Simakov:

而这是非常值得的))))。千万不要直接从基地投向后代--这是一种不确定的行为

在pluses中,通过标准的gimme操作符来投掷引用(无论是向上还是向下)是很危险的,这对我们来说是熟悉和方便的。