Я использую удаленный RPC моего сетевого сервиса и не хочу создавать никаких делегатов в моем коде с привязкой других вещей. Я хочу написать псевдо-асинхронный код. Что-то вроде этого:
await (MyServer->RemoteMethod(parameter_1, parameter_2),
[=] (int32 return_value_1, int32 return_value_2) {
UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), return_value_1, return_value_2);
});
Я не слишком силен в функциональном программировании последних версий C ++.
Но я знаю, что есть такие вещи, как std::function
, Может ли это помочь мне?
Также мне нужно, чтобы код был кроссплатформенным.
То, что вы описываете, не async
—await
при этом вы сможете написать:
std::pair<int32, int32> return_values = await MyServer->RemoteMethod(parameter_1, parameter_2);
UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), return_values.first, return_values.second);
Я полагаю, что эта функция планируется в какой-то будущей версии C ++.
То, что вы описываете продолжение и вы можете использовать boost::future
для этого:
boost::future<std::pair<int32, int32>> return_values_future = MyServer->RemoteMethod(parameter_1, parameter_2);
return_values_future.then([=](boost::future<std::pair<int32, int32>> fut) {
UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), fut.get().first, fut.get().second);
});
Других решений пока нет …