如何解决如何在C ++的if语句中检查lambda的返回值?
我正在仅使用控制台窗口来进行小蛇游戏挑战,我陷入了应该清除控制台的绘制功能中,然后绘制了网格和其他元素(蛇,尾巴和水果)
这是代码:
void draw()
{
system("cls");
for(int h = 0;h < HEIGHT;h++)
{
for(int w = 0;w < WIDTH ; w++)
{
if(h == snake.y && w == snake.x)std::cout << snake.symbol;
else if( [&](){for(Snake::Tail T : snake.tails)
{if(T.x == w && T.y == h)return true;}return false;}
== true)
{std::cout << snake.tailSymbol;}
else if(h == fruit.y && w == fruit.x)std::cout << fruit.symbol;
else std::cout << "O";
}
std::cout << "\n";
}
}
它看起来似乎很混乱,但这是如何遍历网格中的每个位置并首先检查蛇(蛇的头部)是否在该位置,
否则,它会通过使用LAMBDA穿过所有与蛇相连的尾巴的循环
其余的都不重要,但是问题是我必须使用lambda才能将if语句和for循环合并在一起,而不会破坏“ else”链,但是问题是当我尝试检查是否lambda返回true或false我得到错误:
...Snake\main.cpp|40|error: no match for 'operator==' (operand types are 'draw()::<lambda()>' and 'bool')|
我在c ++中使用lambda的经验还不够扎实,但是我仍然想使用lambda而不是函数,如何解决错误并检查值?
解决方法
您正在将lambda表达式与bool
进行比较,这是不允许的。您需要调用lambda并比较您得到的结果,像这样:
else if ([&]() {
for (Snake::Tail T : snake.tails) {
if (T.x == w && T.y == h)
return true;
}
return false;
}() // call it
== true)
您可以做几种简化。对于初学者来说,将bool
与== true
进行比较是多余的,并且不利于可读性。 for
循环可以用算法代替,例如:
else if ([&]() {
return std::any_of(snake_tails.begin(),snake_tails.end(),[&](auto T) {
return T.x == w && T.y == h;
});
}())
由于您现在仅从lambda返回单个值,因此可以完全删除lambda,而只需使用返回值:
else if (std::any_of(snake_tails.begin(),[&](auto T) {
return T.x == w && T.y == h;
}))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。