首页 > 解决方案 > std::find_if 和一个 lambda - 错误 void 值没有被忽略,因为它应该被忽略

问题描述

我正在尝试编写一个使用std::find_if和 lamda 函数来检查元组中的条目的函数。

如果元组中的第三个条目不是 a,nullptr则将元组中的第一个条目(字符串)添加到列表中并返回列表。

但是,编译失败

/usr/include/c++/5/bits/predefined_ops.h:234:30: 错误: void 值没有被忽略,因为它应该是 { return bool(_M_pred(*__it)); }

谁能确定我做错了什么?

std::vector<std::string> class::list() const
{
    std::vector<std::string> arglist;
    arglist.reserve((arguments_.size()));

    std::find_if(arguments_.begin(), arguments_.end(),[&arglist](std::tuple<std::string, std::type_index, Value> argument)
        {
            if (&std::get<2>(argument) != nullptr)
                arglist.push_back(std::get<0>(argument));
        }
    );
    return arglist;
}

标签: c++

解决方案


谓词不应真正执行任何操作,仅返回 a trueorfalse取决于搜索的项目是否符合您的条件。

您的 lambda 不会返回任何内容,这会导致您得到错误。


在我看来,你真正想要的是std::transformor std::for_each。或者甚至只是一个普通的远程for循环


推荐阅读