Alexey Navoykov: Ну вот я с этого и начинал разговор тут. Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно). Но как показано выше, с шаблонами такое не прокатит. С макросами тоже. А я всё это широко применяю. Поэтому и сделал свою реализацию. Хотя она конечно не решает всех проблем. Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже. Поэтому их однозначно придётся выносить на глобальный уровень
关于多次传球--仓促之间,天真地以为MCL会允许这样做
Ну вот я с этого и начинал разговор тут. Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно). Но как показано выше, с шаблонами такое не прокатит. С макросами тоже. А я всё это широко применяю. Поэтому и сделал свою реализацию. Хотя она конечно не решает всех проблем. Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже. Поэтому их однозначно придётся выносить на глобальный уровень
我也广泛使用模板和宏,但认为自由函数只是辅助性的(通常是不受欢迎的)架构元素。当所有的实现都被打包在对象里面,而静态只在类的层面上声明,恼人的bug就会出现,除了有时很难理解他们正确的声明顺序的逻辑,所以编译器不会发誓...
因此,这里存在着变数。而对于函数,是的,它是可多次传递的,所以一切都很正确。 问题的出现正是因为函数初始化的顺序。 简而言之,在C++中,有一个严格的顺序,适用于变量、函数和类型。 而在MQL中,一切都不同。
多次传递在任何情况下都是不好的 - 你可能会遇到递归、死锁等问题。但从好的方面看,这是可以做到的。因此,只有明智地、谨慎地(即正向声明),而不是像现在的多通道编译器那样--如果对任何函数进行正向声明,这个耙子迟早会打到你的额头。
多次传递在任何情况下都是不好的--你会遇到递归、死锁等问题。但是,在pluses中,有可能做正向声明。因此,只有明智地、小心地,而不是像现在这样用multipass编译器--因为如果对任何函数进行正向声明,这个耙子迟早会打到你的额头。
我同意。这个话题之前已经讨论过了。这也是这里很多人喜欢这门语言的原因--你不需要理会函数声明的顺序。 不用说,前段时间我自己也很高兴)。 但它的繁琐性从正面刺激了我。 但随着经验的积累,理解力也在增强。
我也广泛使用模板和宏,但认为自由函数只是辅助性的(通常是不受欢迎的)架构元素。当所有的实现都被打包在对象里面,而静态只在类的层面上声明,恼人的bug就会出现,除了有时很难理解它们正确的顺序逻辑,所以编译器不会发誓...
我同意,如果在OOP中一切都排得很清楚,那么不仅自由函数是不需要的,模板方法也是。
只要你不想写一堆重复的代码,无论是OOP还是非OOP,都需要模板方法。自由函数是另一回事--这些是不同的编程风格。
只要你不想写一堆重复的代码,就需要模板方法,不管是OOP还是非OOP的。
在OOP中,接口就是为此目的而发明的。
接口有点不同。如果我想让同样的代码根据参数类的不同类型来完成同样的工作(不需要声明额外的类),那么接口是没有用的。
接口有点不同。如果我想让同样的代码根据参数类的不同类型做同样的工作(不需要声明额外的类),那么接口就没有帮助。
如果参数是不同的类型,那么做几个具有相应类型的重载方法 是有意义的。 你仍然要在函数中以某种方式将它们分开。 因此,最好将它们分成独立的函数,而不是创建一个混乱的、同样采取非个人类型的函数,即错误地将任何东西传入其中,在库内得到一个编译错误,这是不可取的。 甚至可能没有,这是加倍的糟糕)。
简而言之,在成熟的OOP中,模板函数是一个拐杖(除了少数例外)。
简而言之,模板函数是 成熟的OOP中的一个拐杖。
所以我们在这里。
关于交易、自动交易系统和交易策略测试的论坛
mql5语言的特点、技巧和窍门
Alexey Navoykov, 2019.01.25 10:11
嗯,这就是我在这里 开始谈话的原因。我本来也打算用globals来代替所有的static(当然,这是件很残酷的事情)。 但如上所示,它 对模板 和宏也不起作用。 而我对它们的使用都很广泛。这就是为什么我做了自己的实现。 虽然它没有解决所有的问题。 动态数组仍然不能被初始化,常量类型也不能。 这就是为什么它们肯定要被全局化。