std :: find_if和一个lambda-无效的空值不应该忽略,因为它应该被忽略

时间:2018-11-29 12:39:32

标签: c++

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

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

但是,编译失败并显示

  

/ usr / include / c ++ / 5 / bits / predefined_ops.h:234:30:错误:无效值未   被忽略,因为它应该是{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;
}

1 个答案:

答案 0 :(得分:6)

谓词实际上不应执行任何操作,仅返回truefalse,具体取决于搜索的项目是否符合您的条件。

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


在我看来,您真正想要的是std::transformstd::for_each。甚至只是普通的ranged for loop