2016-05-01 4 views
0

Ich verwende remote RPC meines Netzwerkdienstes und ich möchte keine Delegaten in meinem Code mit anderen Dingen binden. Ich möchte pseudo-asynchronen Code schreiben. Etwas wie dieses:Wie erstellt man in C++ async/erwarten Code?

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

Ich bin nicht zu stark in funktionale Programmierung der neuesten C++ - Versionen. Aber ich weiß, dass es Dinge wie std::function gibt. Kann mir das helfen?

Auch ich brauche diesen Code muss plattformübergreifend sein.

Antwort

3

Was Sie beschreiben, ist nicht async-await, damit würden Sie in der Lage sein, zu schreiben:

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

Ich glaube, dieses Feature ist geplant in einer zukünftigen Version von C++ zu sein.

Was Sie beschreiben, ist eine Fortsetzung und Sie können boost::future dafür verwenden:

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

‚erwarten‘ ist ein Teil eines anhängigen Vorschlag MS für C++ Koroutinen - sieht aus wie ein Teil davon kann in einigen Versionen von Visual Studio https://www.youtube.com/watch?v=_fu0gx-xseY für eine Präsentation auf der letztjährigen cppcon verwendbar sein. – Charlie

Verwandte Themen