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



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

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

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

我在 MQL4/5 上的几美分:


预处理器指令:

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


可变参数:

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


函数重载、
template-s

typename依赖的操作:

虽然这些技术为MQL4/5软件领域带来了更多的"新">编译器功能,但额外的复杂程度并不能证明这些努力是合理的,因为由此产生的原理在exportvirtual#import结构的使用

受到限制的情况下被限制使用。

那么如何做到这一点呢?

好吧,为了快速和迭代的开发需求,人们可以诉诸">几乎可变">PrintFormat( DEBUG_MASK, ..., ..., ... );,将上下文完全(已知)匹配的属性集与静态的、特定于上下文的#defineDEBUG_MASK一起使用。FormatString( MASK_A, par1, par2[, FormatString( MASK_B, par3, par4[, FormatString( ... )[, ... ] )[, ... ])的嵌套结构留给自己的想象。

最新更新