Как создать асинхронный / ожидающий код в C ++?

Я использую удаленный 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, Может ли это помочь мне?

Также мне нужно, чтобы код был кроссплатформенным.

0

Решение

То, что вы описываете, не asyncawaitпри этом вы сможете написать:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]