许多人感兴趣的话题:MetaTrader 4和MQL4的新内容 - 即将发生的重大变化 - 页 10

 

不要忘了,我们有一个非常好的内联机在运行,它耗费了很多小的功能,所以不会有速度的损失。

而在大多数情况下,通过vtable对虚拟函数 的调用被优化为直接调用。这是优化器的有效方法之一。再加上多次内联,你几乎可以完全摆脱复杂的多级调用,使代码看起来很平坦。

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5
 
Renat:

不要忘了,我们有一个非常好的内联机在运行,它耗费了很多小的功能,所以不会有速度的损失。

而在大多数情况下,通过vtable对虚拟函数 的调用被优化为直接调用。这是优化器的有效方法之一。再加上多重内联,几乎可以完全摆脱复杂的多级调用,使代码看起来很平整。

:) 有趣。而且没有人争辩说编译器完美地优化了代码,我只是向我的朋友展示了我为什么不在SB面前趴下。

好吧,让我们用例子来说明。

class CiCustom : public CIndicator : public CDoubleBuffer

                пользуется включением class CSeries : public CArrayObj который в свою очередь

                                                     пользуется включением class CArrayDouble : public CArray и

                                                                           class CArrayObj : public CArray ну и конечно куда как без

                                                                                  включения class CArray : public CObject который включает

                                                                                                           class CObject и #include "StdLibErr.mqh"

在实践中被一个简单的标准函数所取代

CopyBuffer(...);

我们有为艺术而艺术。以此类推,每个元素都会做一些事情(其余的,正如你所理解的,是为了最后的元素工作而写的)。

是的,我同意多功能性,是的,我同意结构良好的代码(你可以说,这是一个用于分析的样本)。

但它的要点是什么呢?重点是,这个库主要是为MQL5向导和作为OOP的教程所需要的。

 
Urain:

我只是让该同志明白我为什么不在SB面前倒下。

是的,是的,我重申--我没有认真反对你的任何论点。关于这一点的争论将更具有宗教性而不是客观性。

好吧,就你的例子而言,就我个人而言,在我的案例中,似乎更可以接受的正是代码的第一个变体,因为所有这些多层次的内含物提供了指标与所有接口的兼容性,从CObject开始,一直到CiCustom。

但是,另一方面--所有的时间序列和指标都是按需创建的,堆积在一个集合中,然后供所有用户使用。当我们只需要复制一次缓冲区时,我们会想为什么要费这么大的劲。

所以在简单的情况下,当然是使用CopyBuffer() 要容易得多。

但是,如果我们有一打的用户使用给定的缓冲区呢? 在我的例子中,他们都会要求使用它,缓冲区会被创建,其余的人都会得到一个对它的引用。如果我们 "直接 "使用CopyBuffer()--我将有十个副本而不是一个。当你更狡猾地使用CopyBuffer()时,你会得到追踪谁和什么缓冲区被分配的东西,这与你提到的封装的成本相当。

我个人是支持合理性的--为一个地方用OOP做这么大的情节是没有意义的。如果我们有大量的用户,那么在我看来,OOP的方法是合理的。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
Urain:

那么现在是时候引入例外情况了,这样,一个代码就可以同时为mql4和mql5编译。

统一的问题迫在眉睫。

同意。非常方便的功能。
C-4:
我在想,当合并两种语言时,像#ifdef这样的条件性编译指令是绝对必要的--这将简化两种平台之间的代码统一,而且依赖平台的API将在编译时被定义。
我们现在至少有四个人 :)
 
Renat:
不幸的是,没有。测试员将保持单线程,没有MQL5云网络
多币种的情况如何?
 
在Mt4中,测试者的意识形态将保持不变。我们不会做任何根本性的改变,至少在不久的将来不会。
 
Renat:

不要忘了,我们有一个非常好的内联机在运行,它耗费了很多小的功能,所以不会有速度的损失。

而在大多数情况下,通过vtable对虚拟函数 的调用被优化为直接调用。这是优化器的有效方法之一。再加上多次内联,你几乎可以完全摆脱复杂的多级调用,使代码看起来很平坦。

啊啊啊...现在我明白为什么我在写程序时最常犯的错误之一是 "函数必须有一个主体"。

它是需要内联的...我在想,为什么我认为一个函数头就足以编译一个模块,但没有...你需要一个身体...

这很好。

 
Laryx:

啊啊啊...现在我明白为什么我在写程序时最常犯的错误之一是 "函数必须有一个主体"。

它是需要内联的...我在想,为什么我认为一个函数头就足以编译一个模块,但没有...你需要一个身体...

这是正确的,但它与优化器没有关系。

如果你已经描述了一个函数的原型,那么主体一定是存在的。即使它是空的。

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

雷纳特,我建议在MT4中,我们应该使图表上的头寸可见性控制不在终端的一般参数中,而是为每个图表单独设置(如MT5中的做法)。

我就这个问题向SR提出的申请已经搁置了两个月了。

 
Interesting:

雷纳特,我建议在MT4中,我们应该使图表上的头寸可见性控制不在终端的一般参数中,而是为每个图表单独设置(如MT5中的做法)。

我就这个问题向SR提出的申请已经搁置了两个月了。

在研究对象时,我们会看到。