我想把FindFirstKey1
函数转换成一个叫做FindFirstKey2
的lambda函数:
以下是我的尝试:
#include <vector>
struct Point
{
int x;
int y;
};
bool FindFirstKey1(std::vector<Point> &m, Point &FirstKeyFound, int currentKeyIndex, int SearchKey)
{
if (currentKeyIndex < m.size())
{
auto key1 = m[currentKeyIndex];
if (key1.x <= SearchKey)
{
FirstKeyFound = key1;
return true;
}
}
return false;
}
int main()
{
std::vector <Point> m;
Point FirstKeyFound;
int currentKeyIndex;
int SearchKey;
bool FindFirstKey2 = [&m, &FirstKeyFound, currentKeyIndex, SearchKey]()
{
if (currentKeyIndex < m.size())
{
auto key1 = m[currentKeyIndex];
if (key1.x <= SearchKey)
{
FirstKeyFound = key1;
return true;
}
}
return false;
};
FindFirstKey1(m, FirstKeyFound, currentKeyIndex, SearchKey);
FindFirstKey2(m, FirstKeyFound, currentKeyIndex, SearchKey);
}
我仍然收到一些我不理解的错误:
错误C2440“初始化”:无法从“main::”转换<lambda_55baf115e13173580997f8ba93ea8513>为“bool”
我需要什么来使它工作,即调用lambda函数就像我调用正则函数一样?
2条答案
按热度按时间wz1wpwve1#
您的代码有两个问题。
问题一:
闭包的类型,或者说lambda,是一个匿名类。它不是一个
bool
,因此应该是:问题二:
FindFirstKey2
是一个不带参数的闭包,见上面,你把它声明为一个闭包,或者lambda,它通过引用捕获四个对象,并且不带参数,但是在这里你调用它并传递给它四个参数。无论如何,你都需要调和这种差异,要么你需要修改闭包以接受四个参数,要么在调用闭包时不给它传递任何参数。
f87krz0w2#
如果要复制
FindFirstKey1
的功能,语法如下: