文章 "MQL5 编程基础:列表" - 页 9

 
C-4:
也许你说的 "正常执行 "是指在模板上执行。
什么意思?在模板上是什么意思?编程时用手指按键的特殊方法?
 
Integer:
那是什么样的?你说的模式是什么意思?编程时用手指按键的某种特殊扭曲方式?

模板是旧编译时宏替换方法的产物,实际上早已失去了面向对象编程的意义。

在现代语言中,此类任务已由运行时工具解决,例如 C# 中的泛型、动态类型识别 RTTI 和变体类型的使用。
当然,仍有一些老家伙喜欢模板,但在我看来,作为程序员,这是一个该退休的信号。

 
revers45:

模板作为过时的编译时宏替换方法的遗留物,实际上早已失去了与面向对象编程的相关性。

在现代语言中,这些任务都由运行时工具来解决,例如 C# 中的泛型、动态类型识别 RTTI 和变体类型的应用。
当然,仍有一些老家伙喜欢模板,但在我看来,作为程序员,这是一个该退休的信号。

有趣的是,模板早已远离宏替换,而是作为一个独立的范例成功地存在着。

C# 中的泛型只是缩小了的模板,实际上不是运行时的模板,而是编译时的模板,因此它们的速度更高)。

但仅仅是 RTTI 和变体类型就暗示了一些不好的想法....

____________________

当然,这一切都很酷。但在 MQL5 中只有模板函数,没有类(会有吗?)因此,目前的工具无法实现模板上的列表。

 
TheXpert:

有趣的是,模板早已远离宏替换,而是作为一个独立的范例成功地存在着。

C# 中的泛型只是非常精简的模板,一般来说,不是运行时间而是编译时间,因此使用泛型的速度更高)。

但仅仅是 RTTI 和变体类型就暗示了一些不好的想法....

____________________

当然,这一切都很酷。但在 MQL5 中只有模板函数,没有类(会有吗?)因此,目前的工具无法实现模板上的列表。

您很高兴,因为化石范式是您对上个世纪的温馨回忆,而且似乎是一个详尽的知识包袱。

但没有必要因此而淘汰现代方法,因为 MQ 会认为他们的客户怀念老祖宗的 Macro Assembler 和 ANSI C,而忽略改进 MQL5 的建议。

 
revers45,有点不对,我终于明白我在说什么了。通用函数的编写有这样一种可能性,以确保重载。你不会为每种类型的参数写一个函数,而是写一个函数模板。上面的人严重混淆了一些东西,我们这里只有函数模板。但是,谈话是以哪类行家开始的,却问到了关于模板的问题,所以一下子就沉默了。看来他们是巧舌如簧,仅此而已。
[删除]  

由于没有模板,您可以用宏来实现,我想甚至有人写过一篇关于这个主题的文章( 宏代替模板)+stl 中的类似算法也是用宏来 实现的。但在我看来,所有这些都应该放在标准库 的模板中,自己编写容器是错误的(仅对教学有用),使用数组更容易做到这一点。

更新:不需要宏上的算法,函数模板是可用的。我不喜欢虚拟插入/...,最好在调试模式下使用类型检查断言。

 
下载了附件很多处有编译错误如:'m_head' - member of the constant object cannot be modified    CiSingleList.mqh    504    9
 
这是一篇好文章,我认为它是写给 Mql5 社区的每一个人的,因为每件事都解释得很清楚。
 
我不得不说,这篇文章让我对 OOP 有了一个清晰的认识。
 

您好、

我尝试编译 test_MQL5_List.mq5 时,出现了以下错误:

m_head' - 常量对象的成员不能被修改 CiSingleList.mqh 504 9
'm_tail' - 常量对象的成员不能被修改 CiSingleList.mqh 505 9
'm_size' - 常量对象的成员不能被修改 CiSingleList.mqh 496 9