在顺序循环和并行循环中'继续'的通用关键字
问题描述:
在顺序for
循环中,可通过调用continue
来中断当前迭代。同样,在Concurrency::parallel_for
循环中,当前迭代 - 这是调用lambda函数的线程 - 可以用return
中断。在顺序循环和并行循环中'继续'的通用关键字
不时,它发生,我有调试parallel_for
循环,使其连续而忘记了return
变成一个continue
,因为在void
函数,编译器不会抱怨。这导致有时很难追查的错误。
我不知道是否Visual C++ 2013提供了任何机制来使用相同的关键字/宏/ ...两个循环。这可能吗?
答
由于您使用的顺序循环仅用于调试,你可以变身为还采用了拉姆达版本:
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);
}
+0
嘿,我不知道,第一个建议实际工作的人。是的,这有点难看,但是因为它只是用于调试,所以我会接受这个作为我的问题的解决方案。 – mOfl
你当然可以定义如何做自己的宏 –
什么建议吗?它将不得不依赖于当前的范围,即for或parallel_for,对吗? – mOfl
这是丑陋的,但有可能... '#定义EXIT_CURRENT_LOOP_ITERATION continue' '#定义EXIT_CURRENT_LOOP_ITERATION return' 定义你需要 –