【问题标题】:Variable argument list with different types in MetaTrader5MetaTrader5 中不同类型的变量参数列表
【发布时间】: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

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

【问题讨论】:

    标签: variadic-functions mql4 mql5 metatrader5


    【解决方案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( ... )[, ... ] )[, ... ]) 的嵌套构造留给自己想象吧。

    【讨论】:

    • 如果您能帮我解决这个问题,我将不胜感激 stackoverflow.com/questions/60933737/converting-mql4-ea-to-mql5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多