此问题已在此处有答案:
Conversion of lambda expression to function pointer(1个答案)
13小时前关闭
我有一个对象,它需要一个函数传递给它才能工作。就像
int doSomething(string a, int b, string(*lookUpFunction)(string a, int b)) {
return lookUpFunction(a,b).length():
}
这被简化为仅包括所需的参数和正确的返回类型。我相信我的定义是正确的,但如果我错了,请纠正我。lookUpFunction接受一个字符串和一个int并返回一个字符串。
我的问题是使用这个功能。我想我会这样用
class x {
DataBase* db;
public:
int myFunc();
}
int x::myFunc() {
return doSomething("a",1,[this](string a, int b)->string {
return db->someFuncThatTakesStringAndInt(a,b);
});
}
但是我的IDE抛出错误。如果我删除“this”,它会说db不可访问。它表示lambda函数不能被转换为正确的格式。
1条答案
按热度按时间kcugc4gi1#
您的
doSomething()
函数正在为其lookUpFunction
回调接收一个普通的C风格函数指针。但是,capturing lambda不能转换为函数指针,只有 non-capturing lambda才是可转换的。您正在捕获
this
,这就是为什么您不能如图所示传入lambda。你的
doSomething()
函数需要接受一个回调对象作为std::function
或模板参数,而不是一个函数指针,例如:现在,您可以将 capturing lambda传递给其中任何一个。