文章 "交易者生活窍门: 利用 defines (#define) 融合 ForEach" - 页 3

 
fxsaber:

这是有缺陷的(对结构来说是无奈之举),也不是最佳方案。

如果我们这样做有缺陷,那么在我看来就是反其道而行之。它也有缺陷,也不是最佳方案,但我觉得它更方便。

#define  ForEach(type, element, array)                             \
for (int __i = 0, __max = ArraySize((array)); __i < __max; __i++) \
{                                                                 \
type element = array[__i];                                        \

void OnStart()
{
   string array[] = {"12", "23", "34", "45"};
   
   ForEach(string, item, array)
      Print(item);
   }
}
 
Комбинатор:

如果你要带着缺陷去做,我觉得应该反过来。同样有缺陷,同样不理想,但我觉得这样更舒服。

是的,这种类型似乎没有出路。摆脱前一个结构的方法是这样的。

template <typename T>
bool Assign( const T &Value1, T &Value2 )
{
  Value2 = Value1;
  
  return(true);
}

#define  forEach(element, array)  for (int __i = 0, __max = ArraySize((array)); __i < __max && Assign(array[__i], element); __i++)

简而言之,就是不完整。尤其是 forEach 只用于读取数组,而不是写入数组。

 

tUT 看起来像是为了工作而工作....。:-)

金句:

"我自己认为文章中给出的技巧是一种生活窍门,并且仍然是经典 MQL5 方法的追随者。也许这些文章能帮助那些习惯于用 MQL4 风格写作的人克服转用MetaTrader 5 平台 时的心理障碍,因为MetaTrader 5 在各方面都更加方便。

 
Roman Shiredchenko:

tUT 看起来像是为了工作而工作....。:-)

金玉良言:

"我自己认为文章中给出的技巧是一种生活窍门,并且仍然是经典 MQL5 方法的追随者。也许这些文章能帮助那些习惯于使用 MQL4 风格写作的人克服在切换到MetaTrader 5 平台 时的心理障碍,因为MetaTrader 5 在所有参数上都要方便得多"。

我相信这很正常,因为有人愿意多写三倍的代码来达到同样的效果。

 
要完成 forEach,需要在宏中使用 ###,这样才能使用嵌套 forEach。
[删除]  
Комбинатор:

如果你要带着缺陷去做,我觉得应该反过来。同样有缺陷,同样不理想,但我觉得这样更舒服。

你已经证明了宏的一个缺陷。

你可以把一个括号放在里面,但你必须记得把第二个括号放在外面。

千万别这么做!

 
Koldun Zloy:

你证明了宏的一个缺点。

哦,对我来说,在当前情况下,它比宏化变量要好。

我直接告诉过你,没有好的版本,而且在当前的现实情况下也不可能有好的版本。

 
Комбинатор:

在我看来,这比在当前情况下宏化变量要好得多。

我直接告诉过你,没有好的版本,而且在当前情况下也不可能有好的版本。

我觉得这个版本不错

#define  ForEach(Index, array) for (int Index = 0, max##Index = ArraySize((array)); Index < max##Index;  Index++) 

void OnStart()
{
  string array[] = {"12", "23", "34", "45"};
  
  ForEach(i, array)
  {
   Print(array[i]);
   
   ForEach(j, array)
     Print(array[j]);
  }    
}
 
fxsaber:

我认为这是一个很好的版本

没错
 
fxsaber:

我认为这是一个很好的版本

嵌套的 ForEach 是为了显示没有碰撞。对吗?