由于您使用的顺序循环仅用于调试,你可以变身为还采用了拉姆达版本:
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' 定义你需要 –