2016-08-23 19 views
5

Tôi muốn sử dụng cú pháp async/await trong C++ (khung UE4), nhưng do mã đa nền tảng, tôi không chắc là có thể ... Hoặc có thể? Nếu có, tôi có thể sử dụng nó như thế nào?Làm tất cả các trình biên dịch C++ có hỗ trợ các từ khóa không đồng bộ/chờ đợi không?

Và cũng có await__await (resumable, yield__yield_value cũng) từ khóa được đánh dấu trong Visual Studio. Có gì khác biệt? Có lẽ không phải tất cả các trình biên dịch đều hỗ trợ từ khóa này hoặc hỗ trợ riêng biệt?

gcc, clang chấp nhận? Hoặc không chấp nhận và tôi chỉ có thể sử dụng macro cho từng nền tảng riêng lẻ.

+0

Không, không phải * tất cả * trình biên dịch hỗ trợ cú pháp 'async' hoặc 'await'. GCC và CLang chỉ là 2 trong số rất nhiều trình biên dịch. Bạn nên kiểm tra Greenhills, IAR, Keil và Visual Studio để đặt tên một vài. –

+1

Việc triển khai llvm & clang đang được tiến hành: xem https://twitter.com/Eric01/status/867473461836263424 (ngày 24 tháng 5 năm 2017: "Coroutines hiện đang ở Clang Trunk!") –

Trả lời

13

asyncawait là các tiện ích mở rộng ngôn ngữ do Microsoft đề xuất với một số sửa đổi, nhưng hiện tại là N4134. Điều này chưa được chấp nhận vào tiêu chuẩn.

Đề xuất phản đối nhiều như http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0158r0.html do không được nướng hoàn toàn và chưa được khám phá đầy đủ trong TS và có các đề xuất cạnh tranh như N3985 đề xuất các coroutines có thể được thực hiện trong tiêu chuẩn ngôn ngữ hiện có.

Để hiểu biết của tôi, trình biên dịch duy nhất thực sự hỗ trợ async/await là MS Visual Studio.

Là bản cập nhật, clang 5.0 có hỗ trợ cho đề xuất đồng thời dự thảo hiện tại https://isocpp.org/files/papers/N4663.pdf hiện đã được chấp nhận làm TS và đang tiến triển theo hướng C++ 20.

+0

Wow, bạn thực sự là Chuyên gia về vấn đề đối tượng chủ đề này. –

Các vấn đề liên quan