return - 无效函数不返回
问题描述
我从 void 函数返回时遇到问题。
当找到名称(输入)时,我可以看到打印的输出,它返回 true。如果 lambda(或 name_checker)函数返回 true,则 void 函数应该返回,但它仍然实现函数的剩余部分。
解决方案
更改您的函数以返回 a bool
,使用该返回值立即退出您找到的东西。像这样的东西
bool findTreeNodeRecursively(unsigned indent, const TreeNode* node, const std::function<bool(const TreeNode*)>& name_checker){
for (unsigned i = 0; i < indent; i++)
{
std::cout << " ";
}
if (!node)
{
std::cout << "!nullptr!" << std::endl;
return false;
}
indent++;
if(name_checker(node) == true){
return true;
}
if (auto control = dynamic_cast<const ControlNode*>(node))
{
for (const auto& child : control->children())
{
if (findTreeNodeRecursively(indent, child, name_checker))
return true;
}
}
else if (auto decorator = dynamic_cast<const DecoratorNode*>(node))
{
if (findTreeNodeRecursively(indent, decorator->child(), name_checker))
return true;
}
return false;
}
在递归函数return
中,仅从一个递归调用返回,它不会一直返回到顶部。如果那是你想要的,你必须对其进行编程。
推荐阅读
- php - Boto3 Cli:如何将 USERDATA 中的变量内容传递给 php 脚本?
- mysql - 防止具有多个值的 MySQL 重复插入自动递增
- neo4j - 作为远程数据库连接到嵌入式 neo4j 数据库
- swift - viewDidDisappear 在主线程上吗?
- chart.js - 从点样式图例中删除 ChartJS 2 边框和阴影
- spring - Spring Boot 中的 Freemarker 模板渲染错误返回 200 OK
- java - Selenium Java 测试等待重定向完成
- sql - SQL 在使用减法运算时考虑重复
- java - Java GUI:repaint() 或类交互问题
- javascript - 选择的悬停背景 - 默认 chrome 如何更改为其他