記事"トレーダーのハック: 定義と ForEach のブレンド (#define)"についてのディスカッション - ページ 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プラットフォームに 切り替える際の心理的障壁を克服するのに役立つだろう。"

 
Roman Shiredchenko:

tUTは仕事のための仕事にしか見えない...。:-)

金言です:

「私自身は、この記事で紹介されているテクニックをライフハックと考え、古典的なMQL5アプローチの信奉者であり続けています。おそらく、これらの記事は、MQL4スタイルで書くことに慣れている人が、すべてのパラメーターではるかに便利なMetaTrader 5 プラットフォームに切り替える際の心理的障壁を克服するのに役立つだろう。"

同じ結果を得るために3倍以上のコードを書く用意がある人がいる時点で、それは普通のことだと確信しています。

 
forEachを終了するには、ネストされたforEachを使用できるように、マクロ内で##を使用する必要があります。
削除済み  
Комбинатор:

欠点があってもやるなら、その逆であるべきだと思う。欠点もあり、最適とは言えないが、私はその方が快適だと思う。

あなたはマクロの欠点の1つを示した。

1つの括弧をその中に入れることはできるが、2つ目の括弧をその外に入れることを忘れてはいけないということだ。

それは絶対にしないでください!

 
Koldun Zloy:

マクロのデメリットの1つを示してくれたね。

ああ、私にとっては、現在の状況では変数をマクロ化するよりはいい。

私は直接あなたに言った、良いバージョンは存在しないし、現在の現実では存在し得ない。

 
Комбинатор:

その方が、変数をマクロ化するよりも良さそうだ。

私が直接言ったように、良いバージョンは存在しないし、現在の現実では存在し得ない。

これは良いバージョンだと思う

#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は、衝突がないことを示すためのものです。そうだろ?