gpt4 book ai didi

firebase 5.4.4 不支持 c++ lambda 捕获?

转载 作者:行者123 更新时间:2023-11-28 04:25:34 30 4
gpt4 key购买 nike

我正在关注官方网站上的 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);

}

报错

error: no matching member function for call to 'OnCompletion'

note: candidate function not viable: no known conversion from lambda to 'firebase::Future::TypedCompletionCallback' (aka 'void (*)(const Future &, void *)') for 1st argument

是否在最新版本中删除了支持?

谢谢。

最佳答案

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

关于firebase 5.4.4 不支持 c++ lambda 捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402423/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com