我正在从官方网站关注c ++教程 https://firebase.google.com/docs/auth/cpp/password-auth#register_callback_on_future
在那儿提到,不支持lambda捕获,因为那里的编译器不支持std :: function。 但是,在这里https://firebase.google.com/support/release-notes/cpp-relnotes 在2017年8月23日发布的4.1.0版本中,提到它们已经添加了对lambda捕获的支持。
当我编写这样的函数
void CreateUserInFirebase(const std::string& Email, const std::string& Password)
{
auth->CreateUserWithEmailAndPassword(Email.c_str(), Password.c_str());
firebase::Future<firebase::auth::User*> Result = auth->CreateUserWithEmailAndPasswordLastResult();
Result.OnCompletion([&SomeVariable](const firebase::Future<firebase::auth::User*>& result, void* user_data)
{}, nullptr);
}
出现此错误
错误:没有匹配的成员函数可以调用“ OnCompletion”
注意:候选函数不可行:第一个参数没有从lambda到'firebase :: Future :: TypedCompletionCallback'(aka'void(*)(const Future&,void *)')的已知转换
是否已删除最新版本的支持?
谢谢。
答案 0 :(得分:1)
OnCompletion
有两个重载:
OnCompletion(TypedCompletionCallback callback, void *user_data) const
和
OnCompletion(std::function< void(const Future< ResultType > &)> callback) const
您定义了带有两个参数的lambda,因此编译器选择了第一个重载,但是lambda捕获了SomeVariable
-代码无法编译,具有捕获功能的lambda无法转换为函数指针。
如果要调用第二个重载,则lambda应该仅采用一个参数(user_data
可以在捕获列表中传递)。
Result.OnCompletion([&SomeVariable](const firebase::Future<firebase::auth::User*>& result) {});