MetaTrader5 中不同类型的变量参数列表

Posted

技术标签:

【中文标题】MetaTrader5 中不同类型的变量参数列表【英文标题】:Variable argument list with different types in MetaTrader5 【发布时间】:2016-12-22 16:09:22 【问题描述】:

如果设置了DEBUG 宏,我有一些mql5 代码我想打印调试消息。我想为这些调试消息使用不同的函数(DebugPrint)。我的第一次尝试是创建一个常规函数,但变量参数似乎不起作用。然后我尝试使用预编译器删除DebugPrint-调用based on this answer,但是编译器的预处理器似乎也不理解变量参数列表。这是我试过的代码:

#ifdef DEBUG
#define DebugPrint(...)
#else
#define DebugPrint(...) Print(__VA_ARGS__)
#endif

关于如何实现我想要做的任何想法?

【问题讨论】:

【参考方案1】:

我在 MQL4/5 上的几分钱:


预处理器指令:

虽然修订后的 New-MQL4.56789 编译器为 #define 预处理器指令语法打开了一些新的、更复杂的结构,但我尝试在生产代码中使用它们时几乎总是烧伤我的手指。


可变参数:

MQL4/5 是一种强类型的编译语言,因此不提供可变参数函数的方法。借助最近的一些语法帮助,来自 (OOP) 基于类的函数 (method) 调用接口覆盖,并且可能使用来自所谓的函数-template-s 的一些高级抽象,有机会为您的 #define 相关行为创建某种语法支持。


函数重载,template-s和typename-依赖动作:

尽管这些技术已将更多“新”编译器功能带入 MQL4/5 软件领域,但额外的复杂程度并不能证明这些努力的合理性,因为由此产生的原则受到限制,无法使用如果它们的使用受限于 exportvirtual#import 构造。


那么如何做到这一点呢?

好吧,为了快速和迭代的开发需求,人们可能会求助于 "几乎-variadic" PrintFormat( DEBUG_MASK, ..., ..., ... ); 使用上下文完整(已知) 将属性集与静态的、特定于上下文的#define-ed DEBUG_MASK 匹配。 FormatString( MASK_A, par1, par2[, FormatString( MASK_B, par3, par4[, FormatString( ... )[, ... ] )[, ... ]) 的嵌套构造留给自己想象吧。

【讨论】:

如果您能帮我解决这个问题,我将不胜感激 ***.com/questions/60933737/converting-mql4-ea-to-mql5

以上是关于MetaTrader5 中不同类型的变量参数列表的主要内容,如果未能解决你的问题,请参考以下文章

方法重载

比较Java方法的重载与覆盖

复习第九天

复习第九天

复习第九天

方法的重载