2016-12-11 35 views
6

Tôi đang sử dụng C++ trong phiên bản Xcode 8.1. Tôi cần phải sử dụng các chức năng của boost::any nhưng tôi phản đối mạnh mẽ để kéo bất kỳ phần nào của Boost vào dự án của chúng tôi (chúng ta hãy không tranh luận nó xin vui lòng).Sử dụng C++ 17 'bất kỳ' với Xcode 8.1

Tôi thấy rằng std::any được "hợp nhất thành C++ 17" here.

Tôi muốn sử dụng điều này trong dự án Xcode 8.1 của mình. Tôi đã thử sử dụng -std=c++1z làm cờ tùy chỉnh trên dự án, nhưng dường như tôi không thể tìm thấy tiêu đề cho dự án.

Tôi làm cách nào để sử dụng std::any hoặc std::experimental::any trong dự án Xcode của mình?

Tôi có thể tải xuống các tiêu đề thích hợp từ việc triển khai và đưa chúng vào mã nguồn của dự án của tôi không? Hoặc, thậm chí tốt hơn, là thực sự có sẵn cho bây giờ trong phiên bản của tôi của Xcode/Clang/C + +?

+0

Xcode là một IDE. Nó đi kèm với một trình biên dịch, nhưng bạn không bắt buộc phải sử dụng trình biên dịch đó. – Yakk

+2

Tôi hiểu rằng, nhưng tôi muốn sử dụng cài đặt vani 8.1 Xcode và trình biên dịch mặc định của nó. Xcode cũng không phải là một C++ thực hiện, tôi hiểu rằng quá. Tôi muốn sử dụng triển khai C++ có sẵn cho tôi như một người dùng Xcode theo mặc định. –

+1

Tôi phản đối mạnh mẽ việc trả lời câu hỏi này (đừng tranh luận về nó). Không, bạn không thể chỉ "ném chúng vào mã nguồn của dự án của bạn". Bạn đang đi ra khỏi con đường của bạn để làm cho cuộc sống phức tạp và khó khăn cho chính mình càng tốt. Tôi sẽ không ủng hộ điều đó. –

Trả lời

6

Bạn không thể nói "Tôi muốn trình biên dịch Xcode mặc định [không hỗ trợ cho any]" và đồng thời yêu cầu hỗ trợ any. Bạn cũng không thể trộn tiêu đề thư viện chuẩn cho các phiên bản trình biên dịch khác nhau.

Bạn có thể

  • sử dụng một phiên bản trình biên dịch cung cấp std::any hoặc
  • sử dụng bất kỳ thư viện của bên thứ ba cung cấp khác any -like loại.
2

Thiết lập cài đặt của bạn không có tiêu chuẩn C++ 17. std::any chỉ đơn giản là không có sẵn cho bạn trừ khi bạn nhận được một trình biên dịch với ít nhất là hỗ trợ thử nghiệm cho những gì bạn muốn.

Clang Cxx Status

Bạn muốn có may mắn hơn rất nhiều chỉ sử dụng boost::any lẽ.

Nếu bạn thực sự không muốn đưa thư viện của bên thứ ba vào chơi, thực tế là việc tạo any của riêng bạn không phải là khó khăn. Tôi không khuyên bạn nên phát minh lại bánh xe nhưng trong trường hợp này nó không phải là khó khăn.

Here's a SO question with an answer showing a way to do 'any'.

2

Việc đưa các loại mới vào std là bất hợp pháp thông qua thư viện của bên thứ ba. Bạn có thể nâng cấp trình biên dịch của bạn, nhận được một thư viện std riêng biệt mà trình biên dịch của bạn hỗ trợ hoặc sử dụng thư viện của bên thứ 3 cung cấp any trong một không gian tên khác hoặc viết của riêng bạn.

Đầu tiên bạn nói không.

Thứ hai là khó, vì xcode không quảng cáo trình biên dịch thực sự là gì. Thường có hai thư viện std phổ biến làm việc với các trình biên dịch có nguồn gốc từ clang-llvm; libC++ và libstdC++. Đó là loại hoán đổi có xu hướng rất tốn kém ngay cả khi một trong những khác có tính năng mà bạn muốn.

Thứ ba về cơ bản là "sử dụng boost" hoặc tương đương.

Điều cuối cùng không khó; một vài ngày làm việc (chủ yếu là lỗi sau khi thực tế), dựa trên các loại văn bản phức tạp tương tự, giả sử "đủ tốt" là đủ tốt (tức là, không bị bắt trong bảo đảm ngoại lệ lý tưởng, hoặc phù hợp với tiêu chuẩn chính xác, vv). Việc thực hiện sẽ yêu cầu nỗ lực hyperbol để tiếp cận sự hoàn hảo, một cách tự nhiên.

2

Xcode 9,0 beta hiện có thể được tải xuống (https://developer.apple.com/download/). Nó hỗ trợ tùy chọn cờ C++ 17.

+1

Có !!! Đây là tin tốt. –

+0

@Zammbi bất kỳ liên kết nào mà bạn có thể cung cấp –

+0

Bạn phải đăng nhập vào Nhà phát triển Apple: https://developer.apple.com/download/ Hiện tại, phiên bản beta đang ở giai đoạn beta. Vì vậy, không nên quá lâu trước khi phát hành phiên bản cuối cùng. – Zammbi

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