2017-03-02 34 views
6

Tôi đã đọc qua tài liệu std::algorithm tại cppreference.com và tôi nhận thấy một thẻ C++ 17 trên rất nhiều thứ tuyệt vời mà tôi chưa sử dụng. Điều tôi chú ý nhất là the new execution policies. Những gì tôi thu thập được từ việc đọc về chúng là tôi có thể thực hiện bất kỳ vòng lặp for_each nào tôi muốn đa luồng chỉ bằng cách chỉ định chính sách thực thi.Làm cách nào để sử dụng chính sách thực thi C++ 17 mới?

Ví dụ: tôi có một chương trình xuất ra hình ảnh có đồ họa 2D trên đó.

int main(){ 
    std::for_each(
     img.buffer().begin(), 
     img.buffer().end(), 
     renderer(
      {-0.5, 0.0, 2.666, 2.0, M_PI/2.0, 0.0}, 
      img, 
      16 
     ) 
    ); 
    fout << img; 
} 

Nếu tôi muốn làm cho chương trình này đa luồng, tôi có thể làm điều đó với một dòng.

int main(){ 
    std::for_each(
     std::execution::par_unseq, // c++17 feature 
     img.buffer().begin(), 
     img.buffer().end(), 
     renderer(
      {-0.5, 0.0, 2.666, 2.0, M_PI/2.0, 0.0}, 
      img, 
      16 
     ) 
    ); 
    fout << img; 
} 

Tuy nhiên khi lần đầu tiên tôi cố gắng này (với g++ -std=c++17) Tôi đã nhận ra lỗi nói với tôi rằng ‘std::execution’ has not been declared, vì vậy tôi cố gắng thêm #include <execution> nhưng nó nói execution: No such file or directory. Tôi cũng đã thử #include<experimental/algorithm> thay vì #include<algorithm> nhưng tôi nhận được kết quả tương tự. Làm cách nào để sử dụng tính năng mới này?

+2

Xác minh rằng g của bạn ++ hỗ trợ tính năng này. C++ 17 thậm chí không chính thức được thực hiện, nhiều khả năng cho một vài tháng tốt. – chris

+1

libstdC++ chưa hỗ trợ tính năng này, hãy xem trạng thái của P0024R2 là "không": https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#iso.2017.specific – Fanael

Trả lời

5

C++ 17 chưa được hoàn thành. Và các trình biên dịch khác nhau vẫn chưa thực hiện đầy đủ nó.

-std=c++17 có nghĩa là "cung cấp cho tôi tất cả C++ 17 bạn đã hoàn thành", không phải "là trình biên dịch C++ 17 hoàn toàn hợp lệ".

Tính năng này không được trình biên dịch và/hoặc thư viện chuẩn của bạn hỗ trợ tại thời điểm này. Hãy kiểm tra lại sau vài tuần/tháng/năm.

+3

Có bất kỳ tính năng nào không trình biên dịch trên bất kỳ phiên bản cạnh chảy máu có hỗ trợ nó? Tôi đã thử clang trên thân cây và gcc 7. – Zitrax

0

Theo tôi hiểu từ cppreference tính năng này được xác định trong tài liệu P0024R2 và chưa được hỗ trợ trong bất kỳ trình biên dịch nào.

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