2016-08-23 39 views
5

Chcę użyć składni async/await w C++ (struktura UE4), ale ze względu na kod na wielu platformach nie jestem pewien, czy jest to możliwe ... czy możliwe? Jeśli tak, jak mogę go użyć?Czy wszystkie kompilatory C++ obsługują asynchroniczne/oczekujące słowa kluczowe?

A także istnieją await i __await (resumable, yield i __yield_value również) słowa kluczowe, które podkreślone w Visual Studio. Jaka jest różnica? Może nie wszystkie kompilatory obsługują te słowa kluczowe lub obsługuje osobno?

gcc, clang są akceptowane? Lub nie akceptuję i mogę po prostu użyć makr dla każdej platformy indywidualnie.

+0

Nie, nie * wszystkie * kompilatory obsługują składnię 'async' lub' await'. GCC i CLang to tylko 2 z wielu kompilatorów. Powinieneś sprawdzić Greenhills, IAR, Keil i Visual Studio, aby wymienić tylko kilka. –

+1

Implementacja llvm & clang jest w toku: zobacz https://twitter.com/Eric01/status/867473461836263424 (24 maja 2017 r .: "Coroutines są teraz w Clang Trunk!") –

Odpowiedz

13

async i await są rozszerzeniami języka zaproponowane przez Microsoft z kilkoma wersjami, ale prąd jest N4134. To nie zostało jeszcze zaakceptowane w standardzie.

Propozycja przeciwstawia się wielu takich jak http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0158r0.html powodu nie będąc całkowicie upieczony i po nie w pełni zbadane w TS i tam konkurencyjnych propozycji jak N3985 który proponuje współprogram, które mogą być realizowane w ramach istniejącego standardu językowego.

Według mojej wiedzy jedynym kompilatorem, który faktycznie obsługuje async/await jest MS Visual Studio.

Jako aktualizacja, clang 5.0 ma wsparcie dla aktualnej propozycji propozycji ryczałtowych https://isocpp.org/files/papers/N4663.pdf, która została zaakceptowana jako TS i rozwija się z myślą o standardzie C++ 20.

+0

Wow, naprawdę jesteś ekspertem w dziedzinie tematyki ten temat. –