2016-12-04 2 views
1

私はFirebase Realtime Databaseを使用しており、交信中にベクターに値を追加したい、つまりベクトルを取得、更新、ベクトルを設定します。DatabaseReference :: RunTransactionを実行するときにラムダにキャプチャ値を追加することは可能ですか?

私はいくつかの簡単な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("https://stackoverflow.com/users/" +userId+ "/tasks/").RunTransaction(transaction); 

私はそのラブダにparamを追加しました。別の方法でやってもいいですか?

Compillerエラー:私は答えを与えることができ、この問題についての私の研究の後

tasksmanager.cpp:62:72: error: no matching function for call to 'firebase::database::DatabaseReference::RunTransaction(TasksManager::createTask(Task*)::<lambda(firebase::database::MutableData*)>&)' 
    dbref.Child("https://stackoverflow.com/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*)' 

答えて

0

。 このワークフローでは、std::function class from C++ 11(または決して)を使用できます。

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