void函数不返回

时间:2020-07-27 17:52:45

标签: return void

我在从void函数返回时遇到问题。

我可以看到找到名称(输入)后输出的输出,该输出返回true。如果lambda(或name_checker)函数返回true,则void函数应返回,但仍会实现该函数的其余部分。

1 个答案:

答案 0 :(得分:1)

更改函数以返回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中,它仅从一个递归调用返回,而不会一直返回到顶部。如果那是您想要的,则必须对其进行编程。

相关问题