c++ - 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;
}
解决方案
谓词不应真正执行任何操作,仅返回 a true
orfalse
取决于搜索的项目是否符合您的条件。
您的 lambda 不会返回任何内容,这会导致您得到错误。
在我看来,你真正想要的是std::transform
or std::for_each
。或者甚至只是一个普通的远程for
循环?
推荐阅读
- azure - 将文件从手机复制到 ADLS gen2
- singlestore - memsql 使用 order by 显示缓慢的性能响应
- nuget-package-restore - GitHub Actions:找不到输入文件
- c - av_read_frame() 时出现分段错误
- ruby - 在 Chef 中设置“实用程序”资源的最佳方式是什么
- pentaho - Pentaho 数据集成 MongoDB 输入速度很慢
- javascript - Material-UI 在生产模式下有不同的样式结果?
- python - 为什么我在这个 python 程序中得到一个 TypeError
- javascript - 将 API 对象推送到数组中
- javascript - 删除选择框reactJS中出现的编辑和删除按钮