Firebase 5.4.4不支持c ++ lambda捕获吗?

时间:2019-01-28 12:50:35

标签: c++ firebase firebase-authentication

我正在从官方网站关注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 *)')的已知转换

是否已删除最新版本的支持?

谢谢。

1 个答案:

答案 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) {});