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 软件领域,但额外的复杂程度并不能证明这些努力的合理性,因为由此产生的原则受到限制,无法使用如果它们的使用受限于 export
、virtual
或 #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 中不同类型的变量参数列表的主要内容,如果未能解决你的问题,请参考以下文章