据我所知,MQL4中不存在函数指针。
作为我使用的解决方法:
// included for both caller as callee side
class Callback{
public: virtual void callback(){ return; }
}
然后在从...传递回调的源中:
class mycb : Callback{
public: virtual void callback(){
// call to whatever function needs to be called back in this source
}mcbi;
现在mcbi可以通过如下传递:
afunction(){
fie_to_receive_callback((Callback *)mycbi);
}
并且接收者可以回调为:
fie_to_receive_callback(mycb *mcbi){
mcbi.callback(); // call the callback function
}
是否有更简单的方法在mql4中传递函数回调?
答案 0 :(得分:1)
实际上,有一种方法可以在MQL4中使用函数指针。 这是一个示例:
typedef int(*MyFuncType)(int,int);
int addition (int a, int b)
{ return (a+b); }
int subtraction (int a, int b)
{ return (a-b); }
int operation (int x, int y, MyFuncType myfunc)
{
int g;
g = myfunc(x,y);
return (g);
}
int OnInit()
{
int m,n;
m = operation (7, 5, addition);
n = operation (20, m, subtraction);
Print(n);
return(INIT_FAILED); //just to close the expert
}
答案 1 :(得分:0)
MQL4
运行时执行引擎(MT4)具有相当脆弱的进程/线程处理,并且添加更多(更智能)的构造(超出基本的{ OnTimer() | OnTick() | OnCalculate() }
事件限制的回调)构成对已经无法保证的威胁RealTime执行主要MT4职责。虽然" New" -MQL4.56789可能会提供黑客攻击,但可能会有更安全的卸载策略进行分发,让MT4传统处理程序接收"预先烘焙"来自外部处理群集的结果,而不是试图在一年多岁的圣诞树上挂起越来越多的闪烁小工具。
为了实现这种危险避免的粗暴程度,请注意原始OnTimer()
使用了1秒的分辨率(是1.000.000.000 ns
步骤,其中流提供商将事件标记为纳米级秒......)
*):是,自 "new"-MQL4
简介以来,原版MQL4
中有许多隐身模式更改 - 语言。每次更新后,我们都建议您查看"新的" - 帮助文件,因为可能有新选项和&令人讨厌的惊喜。维持MQL4
代码库超过几百人*年,这确实是一次非常具有破坏性的经历。