由於您使用的順序循環僅用於調試,你可以變身爲還採用了拉姆達版本:
parallel_for (first, last, [&](size_t i)
{
if(condition)
return;
do_stuff(i);
});
變換成
for (size_t i = first; i < last; i++)[&]
{
if(condition)
return;
do_stuff(i);
}();
這是醜陋的,肯定的。但是,如果僅僅用於調試,它不會保持這種狀態。
或者,你可以包裝在一個循環中,做了一次迭代所有的lambda函數,並始終使用continue
代替return
。缺點是你醜化了非調試代碼。
parallel_for (first, last, [&](size_t i)
{
do {
if(condition)
continue; // same as return
do_stuff(i);
} while(0);
});
作品相同的順序形式:
for (size_t i = first; i < last; i++)
{
do {
if(condition)
continue; // same as continue without the do/while
do_stuff(i);
} while(0);
}
你當然可以定義如何做自己的宏 –
什麼建議嗎?它將不得不依賴於當前的範圍,即for或parallel_for,對嗎? – mOfl
這是醜陋的,但有可能... '#定義EXIT_CURRENT_LOOP_ITERATION continue' '#定義EXIT_CURRENT_LOOP_ITERATION return' 定義你需要 –