mql5语言的特点、微妙之处以及技巧 - 页 113

 
pavlick_:

我不明白为什么我的解决方案会更糟糕,我也会把它放在这里。

因为它原本就是一个 "看我怎么做 "的表演,而且它需要的正是事先想好的解决方案。而你的不适合制作。

但即使是导演也没有考虑到,根据文件规定,计算参数的顺序是不保证的

 
A100:

但即使是主任也没有考虑到,根据文件规定,参数的计算顺序是不保证的

公平地说,MQL文档 确实描述了这一点。

注意事项

你必须记住,参数是倒着传给函数的,也就是说,最近的参数先被计算 和传递,然后是倒数第二个,以此类推。开头括号后第一个的参数被计算 并最后传送。

从C++的角度来看,这当然是疯狂的,但如果它是MQL中的一个记录规则,它可能是可以的,如果你不打算在未来移植你的代码。如果你这样做,你可以通过检查#ifdef __MQL__来确保这个地方。

 
A100:

计算参数的顺序是不保证的

我刚刚注意了你的链接。 的确,它是不保证的。 多么矛盾的MQL))

 
Alexey Navoykov:

现在才注意到你的链接。 确实,那里没有保证。 多么有争议的MQL))

在x32反转(我想它会保存),因为有一个直接链接到堆栈。虽然在x64上,没有任何意义的反面,这就是为什么对未来没有任何保证......此外,它看起来很不自然

如果优化和不优化的顺序不同,我甚至不会感到惊讶

 

对于提供的所有选择,我想说,谢谢你。你已经建设性地帮助解决了一个实际问题。


这项任务得到了很好的证明,即如果 空白TimeCurrent() 会失败。虚空以其目前的形式能够使许多东西陷于瘫痪。

 

我想调用父方法

下面是代码,我做错了什么?

//+------------------------------------------------------------------+
class A
  {
public:
   virtual int Test_A()
     {
      return 100;
     }
  };
//+------------------------------------------------------------------+
class B :public A
  {
public:
   virtual int Test_A()
     {
      return 200;
     }
  };

B b;
//+------------------------------------------------------------------+
void OnStart()
  {
   Comment (A::b.Test_A());
  }
//+------------------------------------------------------------------+


 
Vladimir Pastushak:

我想调用一个父方法

正确的语法是这样的。

b.A::Test_A()

但在Mql中,没有正确或错误。

但问题更多的是针对你的--如果一个函数需要从派生函数中调用,为什么要把它放在一个基础虚函数 中?

 

fxsaber:

该任务很好地表明,如果 空白 调用TimeCurrent(),没有任何东西会起作用。虚空以其目前的形式能够残害很多东西。

一目了然。

#define  MACROSV(NEW_HANDLE_, VOIDFN_) \
do{                                   \
   int prev=GetHandle();              \
   if(SelectHandle(NEW_HANDLE_))      \
      VOIDFN_;                        \
   SelectHandle(prev);                \
}while(false)

两个宏似乎没有什么伤害。更加优雅的东西,通过μl的力量,并没有想到。

 
pavlick_:

从我的头顶上看。

为什么要做......而? 光是大括号就足够了。
 
Alexey Navoykov:
为什么要做......而? 光是大括号就足够了。

为了使其发挥作用。

if(...)
   MACROSV(...);
else
{
}