std :: find_if和lambda - error void值不应该被忽略

che*_*ldi -3 c++

我正在尝试编写一个使用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;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

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

你的lambda没有返回任何东西,这会导致你得到的错误.


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