0
我使用匿名函數(也稱爲lambda)作爲find_if的條件。顯然我可以爲它製作一個特殊的類,但是C++ 11說我可以使用匿名函數。 但是,爲了便於閱讀和理解,我決定將匿名函數保存在作爲函數鍵入的局部變量中。保存一個匿名函數(lambda)作爲函數型變量
不幸的是,我得到的錯誤:
no match for call to '(std::function<bool(Point*, Point*)>) (Point*&)'
note: candidate is:
note: _Res std::function<_Res(_ArgTypes ...)>::operator()(_ArgTypes ...) const [with _Res = bool; _ArgTypes = {Point*, Point*}]
note: candidate expects 2 arguments, 1 provided
我到底做錯了什麼?所謂的候選人對我來說是希臘人。 我試圖將lambda直接放在find_if-invokement中,但那也不起作用。
#include <vector>
#include <function>
#include <algorithm>
using std::vector;
using std::function;
using std::find_if;
Point* Path::getPoint(int x, int y)
{
function<bool(Point*, Point*)> howToFind = [&x, &y](Point* a, Point* b) -> bool
{
if(a->getX() == x)
{
return true;
}
else if(a->getX() < b->getX())
{
return true;
}
else
{
return false;
}
};
vector<Point*>::iterator foundYa = find_if(this->points.begin(), this->points.end(), howToFind);
if(foundYa == points.end())
{
return nullptr;
}
return *foundYa;
}
代碼cnicutar的有用的答案後,修正部分。我曾在其他地方需要修改我的代碼,但是這超出了這個問題的範圍:
function<bool(Point*)> howToFind = [&x, &y](Point * a) -> bool
{
if(a == nullptr)
{
return false;
}
else
{
if(a->getX() == x && a->getY() == y)
{
return true;
}
else
{
return false;
}
}
};
我明白了。 所以lambda的語法是正確的,但lambda的參數在給定的上下文中是不正確的。 – RoestVrijStaal 2014-11-10 18:33:12