MetaTrader5

时间:2016-12-22 16:09:23

标签: variadic-functions mql4 mql5 metatrader5

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

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

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

1 个答案:

答案 0 :(得分:1)

我在MQL4 / 5上的几美分:

预处理程序指令:

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

Variadic论点:

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

功能重载, template -s

typename - 依赖行为:

虽然这些技术为MQL4 / 5软件域带来了更多“新”编译器功能,但由于最终的原则被限制为无法使用,因此额外的复杂程度并不能证明这些努力是正确的。如果他们的使用受到 export virtual #import结构的限制。

那么如何使这项工作?

嗯,为了快速和迭代开发需求,人们可以使用上下文完整(已知)匹配的静态上下文属性几乎 - 变种” PrintFormat( DEBUG_MASK, ..., ..., ... ); - 特定#define - ed DEBUG_MASK FormatString( MASK_A, par1, par2[, FormatString( MASK_B, par3, par4[, FormatString( ... )[, ... ] )[, ... ])的嵌套构造留给了自己的想象力。