我正在尝试编写一个使用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;
}
答案 0 :(得分:6)
谓词实际上不应执行任何操作,仅返回true
或false
,具体取决于搜索的项目是否符合您的条件。
您的lambda不返回任何内容,这会导致您收到错误消息。
在我看来,您真正想要的是std::transform
或std::for_each
。甚至只是普通的ranged for
loop?