2012-01-15 44 views
20

Tôi đang cố gắng làm cho chương trình của mình hoạt động mà không cần sử dụng boost, nhưng không thể tìm thấy thay thế một số mẫu hữu ích. Cụ thể, tôi không thể tìm thấy mẫu boost::optional tương tự trong thư viện chuẩn. Có một số thay thế tiêu chuẩn cho boost::optional (C++ 11 hoặc một nơi khác)?boost :: tùy chọn thay thế trong Thư viện chuẩn C++

+0

C++ 0x == C++ 11, bị xóa khỏi câu hỏi. :) – Xeo

+1

Bạn có thể sử dụng một con trỏ nullable như là một thay thế rẻ tiền và không an toàn để 'boost :: optional'. Hoặc có thể 'std :: unique_ptr', trong đó giá trị 0 (null_ptr, NULL) được hiểu là một kiểu tùy chọn không khởi tạo. Bên cạnh những hạn chế, điều tốt là bạn không cần phải thực hiện bất cứ điều gì; nhưng chỉ cần giữ sự trừu tượng trong tâm trí. Một đầu mối về điều này được đưa ra trong hướng dẫn sử dụng tăng cường http://www.boost.org/doc/libs/1_53_0/libs/optional/doc/html/boost_optional/development.html#boost_optional.development.the_interface "Kết quả là , bạn có thể thay thế tùy chọn bằng T * trên một số trường hợp nhưng không phải lúc nào cũng " – alfC

Trả lời

26

Câu trả lời ngắn: Số

Câu trả lời dài: Tự cuộn theo thông số tăng. Tài liệu này khá đầy đủ và mã không phức tạp, nhưng điều này vẫn yêu cầu các kỹ năng C++ trên trung bình.

Để cập nhật câu trả lời này: Rất tiếc là C++ 14 không giao hàng với std::optional. Đề xuất hiện tại (Bản sửa đổi 5) là N3793 và dự kiến ​​sẽ được xuất xưởng dưới dạng đặc tả kỹ thuật riêng biệt hoặc trở thành một phần của C++ 17.

+12

Trong một số môi trường, không thể sử dụng tăng lên một cách chính trị, thật đáng buồn. –

+3

Bạn đã nghĩ về [chỉ trích xuất tùy chọn tăng] (http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html)? – Nova

+3

Tại sao cố gắng loại bỏ các phụ thuộc tăng cường? Oh, hãy để tôi đếm lý do ... – einpoklum

12

Hiện tại có a proposal for C++14 (hoặc C++ 17). Vì vậy, câu trả lời là (có thể) chưa :).

+4

Dường như nó đã được bỏ qua C++ 14 thành Kỹ thuật Đặc điểm kỹ thuật (xem http://en.cppreference.com/w/cpp/utility/optional): ( – Nova

+1

Đó không phải là trường hợp 'bỏ phiếu' trong C++ nói-ủy ban thực sự có nghĩa là 'bỏ phiếu cho'? –

2

Giống như pmr explained, hiện không thể thực hiện được và sẽ không đến khi C++ 17 hết.

Tuy nhiên, bạn có thể sử dụng single header library trên github này làm giảm thay thế tùy chọn tăng hoặc tùy chọn. Nó không có phụ thuộc (ngoại trừ trình biên dịch C++ 11/C++ 14).

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