ローカル関数定義を使用してコードブロックをN回実行すると、C#の並列バージョンのように動作しますが、同じスコープ内で2つ以上を使用すると、f
関数の多重定義エラーが発生します。 f1、f2、f3などの関数名を段階的に変更するにはどうしたらよいですか?C++:どのように同じ範囲で複数回parallel-forマクロを使用できますか?
定義:
#ifndef PARALLEL_FOR
#define PARALLEL_FOR(N,O) \
struct LocalClass \
{ \
void operator()(int i) const O \
} f; \
std::thread threads[N]; \
for(int loopCounterI=0; loopCounterI<N; loopCounterI++) \
{ \
threads[loopCounterI]=std::thread(f,loopCounterI); \
} \
for(int loopCounterI=0; loopCounterI<N; loopCounterI++) \
{ \
threads[loopCounterI].join(); \
} \
#endif
使用法:
PARALLEL_FOR(
5,
{std::cout<<100*i<<std::endl;}
);
出力:
0
300
200
100
400
は、通常、その結果としての通話が、WHAのために解決するだろう{\
と}\
を追加私は並行してネストされていますか?
あなたがマクロ文字列の連結を使用することができ、IEを、 '##'。だから 'LocalClass ## Number'。 –
しかし、同じマクロを2回使用してNumberをインクリメントすることはできません。たぶん私は間違っています? –
単一の他のパラメータを渡すか、以前に実行されたすべてのインデックスを追跡するために複雑で圧倒的な方法を使用します。下に投稿された回答のように、カウントを渡すだけです。 –