【发布时间】:2015-09-29 09:22:59
【问题描述】:
我有一个数字列表。
我正在尝试过滤列表,只保留正数。
我试图通过传递一个 lambda 作为参数来做到这一点。
我想知道为什么会出现函数不匹配错误。
#include <vector>
#include <algorithm>
#include <functional>
template<typename T>
std::vector<T> keep(
const std::vector<T> &original,
std::function<bool(const T&)> useful)
{
std::vector<T> out;
for(T item:original)
{
if(useful(item))
out.push_back(item);
}
return out;
}
int main()
{
std::vector<int> a={4,6,2,-5,3,-8,13,-11,27};
a=keep(a,[](const int& x)->bool{return x>0;});
for(int y:a)
{
std::cout<<y<<std::endl;
}
return 0;
}
这是错误信息:
error: no matching function for call to ‘keep(std::vector<int>&, main()::<lambda(const int&)>)’
a=keep(a,[](const int& x)->bool{return x>0;});
^
【问题讨论】:
-
您可以使用标准库算法std::copy_if 更轻松地做到这一点:coliru.stacked-crooked.com/a/99cdc73f48d19ba7
-
错误信息中的代码与您的代码不匹配。
-
你使用什么编译器?
-
@molbdnilo 谢谢,已修复。
标签: c++ c++11 lambda type-conversion callable-object