mql5中的OOP、模板和宏,细微之处和用途 - 页 19

 
Seric29:

这个宏将是无效的,为了从它返回一个结果,你需要一个表达式来计算,换句话说,你需要在它里面调用一个函数,我得出了这个结论。

是的,先试着编译这个 "神奇的奇迹 "代码。这里有些人在疯狂地幻想,与现实脱节。

 
Vict:

我不知道任务是什么,也不知道你是否在那里挖掘,但乍一看,这是另一种方法。

所以,你可以替换函数的任何部分(不一定是数组填充,因为它在我的例子中),并根据需要进行实例化。

这有点呆板。你看了一眼代码,然后想:好吧,可能数组会被那些传递给函数的数字填满,或者被洗成那个值......。但事实证明...

 
Dmitry Fedoseev:

这是一个有点小麻烦的问题。你乍一看到代码,会想:好吧,数组可能会被传递给函数的那些数字填满,或者被洗成那个值......。但事实证明...

我没有印象,好吧,我是p****。

 
Vict:

你有一些算法,你可以把一个子算法放在里面,可以说是 "调整 "它,以解决一个特定的任务。本质上,它是虚拟函数 的类似物。主要是你问自己,现在你不知道为什么)),你有一个框架,里面放了一个循环。

我想在这个框架中添加代码,让整个事情返回一个结果,但我的框架工作起来是无效的,我正试图弄清楚。 我需要它能与不同维度的数组一起工作。

 
Vict:

调用一个函数,在这个函数 中你传递一个指向另一个函数的指针(例如,循环体)。

int for3(int a, int b, int c, void(*loop)()) {
        for(int i=0; i<a; i++)
                for(int j=0; j<b; j++)
                        for(int k=0; k<c; k++) 
                                loop();
        return 4;
}


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
}
 
所以不是每个宏都能返回一个值,谁知道呢?
 
Seric29:
所以不是每个宏都能返回一个值,谁知道呢?

你根本就不能从宏中返回一个值。宏是用一段代码替换另一段代码的一种方式。

 
Dmitry Fedoseev:

你根本就不能从宏中返回一个值。宏是用一段代码替换另一段代码的一种方式。

我明白了,谢谢你清晰而正确的回答。

 
嗯,不完全正确,该宏可以扩展为一个三元运算符?:或逗号运算符(不在μl中),从中可以返回一个值。
 
Vict:
其实不然,宏可以扩展为三元运算符?:或逗号运算符(不在μl中),你可以从中返回值。

在C++中三元运算符更加发达,如果条件为真,你可以执行多个动作,而mql4和以前一样关闭了对内存的访问,至少在10年里,开发者没有做出重大改变,没有创造出值得注意的函数(只有对颜色和文本工作的函数,没有其他的--只是愚蠢)。