gpt4 book ai didi

android - 执行 DatabaseReference::RunTransaction 时是否可以将捕获值添加到 lambda?

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:42 25 4
gpt4 key购买 nike

我使用 Firebase 实时数据库并希望在事务处理中为我的 vector 添加值,即获取 vector 、更新、设置 vector 。

我写了一些简单的 labda,但一直坚持这些代码无法编译。

    auto transaction  = [&key](firebase::database::MutableData* data){
auto value = data->GetValue();
if(!value.is_vector() or value.is_null())
return firebase::database::kTransactionResultAbort;
std::vector<firebase::Variant> taskList = value.vector();
//!! taskList.push_back(firebase::Variant(key)); !!//
data->SetValue(firebase::Variant(taskList));
return firebase::database::kTransactionResultSuccess;
};
dbref.Child("/users/" +userId+ "/tasks/").RunTransaction(transaction);

我想给那个 labda 添加参数。我可以用其他方式做到吗?

编译器错误:

    tasksmanager.cpp:62:72: error: no matching function for call to 'firebase::database::DatabaseReference::RunTransaction(TasksManager::createTask(Task*)::<lambda(firebase::database::MutableData*)>&)'
dbref.Child("/users/" +userId+ "/tasks/" + key).RunTransaction(tran);
^
tasksmanager.cpp:62:72: note: candidate is:
In file included from ..\firebase_cpp_sdk\include/firebase/database.h:9:0,
from tasksmanager.cpp:2:
..\firebase_cpp_sdk\include/firebase/database/database_reference.h:178:24: note: firebase::Future<firebase::database::DataSnapshot> firebase::database::DatabaseReference::RunTransaction(firebase::database::TransactionResult (*)(firebase::database::MutableData*), bool)
Future<DataSnapshot> RunTransaction(DoTransaction* transaction_function,
^
..\firebase_cpp_sdk\include/firebase/database/database_reference.h:178:24: note: no known conversion for argument 1 from 'TasksManager::createTask(Task*)::<lambda(firebase::database::MutableData*)>' to 'firebase::database::TransactionResult (*)(firebase::database::MutableData*)'

最佳答案

经过我对这个问题的研究,我可以给出答案;对于该工作流程,我们可以使用 c++11 中的 std::function 类(或从不使用);

std::function<firebase::database::DoTransaction> callback;
callback = [any captures here](firebase::database::MutableData* mutableData) { ..yours code here... };
databaseReference.RunTransaction(callback.target<firebase::database::DoTransaction>());

关于android - 执行 DatabaseReference::RunTransaction 时是否可以将捕获值添加到 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954213/

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