Trading 定义MQL4的正确方法是什么#导入静态类方法“;?
我试图实现的是在单独的文件中定义类(使用Trading 定义MQL4的正确方法是什么#导入静态类方法“;?,trading,algorithmic-trading,mql4,metatrader4,Trading,Algorithmic Trading,Mql4,Metatrader4,我试图实现的是在单独的文件中定义类(使用MQL4),并在主代码中使用这些类中的方法。本质上是导入静态类成员函数 class example{ // ____ in example.mq4 public: static void myfunction(void) export { .. do something .. } } 编译器错误: myfunction:函数必须有一个主体 (注意ex
MQL4
),并在主代码中使用这些类中的方法。本质上是导入静态类成员函数
class example{ // ____ in example.mq4
public:
static void myfunction(void) export { .. do something .. }
}
编译器错误:
myfunction:函数必须有一个主体
(注意example.mq4
编译为example.ex4
,可以导入ok)“新”-MQL4语法正在演变
为了指明的目的
类定义语法应该足够,在实例化一个类时,可以在实例对象上调用它的public
方法
编译时语法:
导出没有类继承的函数(将整个类继承在一起)不符合OOP概念。这在OnInit()
调用中可以清楚地看到,您的代码尝试调用一个函数,该函数实际上是一个基于类的对象-方法,此时还没有实例化任何对象,应该在其上执行方法anObjectINSTANCE.aClassOrInstanceMETHOD()
所以,只需包含
class example{ // ____ in example.mqh
public:
static void myfunction() { .. do something; }
}
main.mq4中的/-------------------------------//\uuuuuuuuu
#属性严格/“新”-MQL4
#包括//include
示例anObject;//创建一个全局可见的实例
// ----------------------------
void OnInit(){
anObject.myfunction();//对自身执行方法的请求
return(空);/“new”-即使在void fun()上,MQL4也坚持返回
}
*拥有较大的项目,其中所有源代码文件都将包含在主文件中,这有点违背了OOP的目的,即我们希望公开方法并隐藏私有和受保护的方法。*从调试和错误预防的角度来看,将所有源代码包含到一个主文件中是不切实际的。因此,只有类定义才能解析到对象的链接,就像DLL的*也许有更好的解决办法?哦,是的,有。要么使用代理类,其方法调解与非公共实现的交互,要么进入完全分布式的处理模型,其中私有实现完全位于MQL4代码库外部,只提供交互代理(我们使用ZeroMQ信令/消息传递层进行分布式处理已经有好几年了,并且喜欢基于代理的模型——用于系统服务卸载、GPU网格计算、AI/ML预测设施联合集成AlgoTrading/MMI GUI增强交易等)
#include <example.mqh> // ____ in main.mq4:
#import "example.ex4"
void example::myfunction(void);
#import
void OnInit(){
example::myfunction();
}
class example{ // ____ in example.mqh
public:
static void myfunction() { .. do something; }
}
// ---------------------------- // ____ in main.mq4
#property strict // "new"-MQL4
#include <example.mqh> // include
example anObject; // create a globally visible instance
// ----------------------------
void OnInit(){
anObject.myfunction(); // request <anObject> to perform <myfunction> method on self
return( EMPTY ); // "new"-MQL4 insists on return even on void fun()
}