2016-05-01 4 views
0

Я использую удаленный RPC моей сетевой службы, и я не хочу создавать каких-либо делегатов в моем коде с привязкой других вещей. Я хочу написать псевдо-асинхронный код. Что-то вроде этого:Как создать асинхронный/ожидающий код на C++?

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. Может ли это помочь мне?

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

ответ

3

То, что вы описываете не 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); 
}); 
+0

«ждут» является частью отложенного предложения от MS для сопрограмм C++ - выглядит как некоторые из них может можно использовать в некоторых версиях Visual Studio https://www.youtube.com/watch?v=_fu0gx-xseY для презентации на нем из прошлогоднего cppcon. – Charlie