2012-02-08 31 views
19

ví dụ boost::function được di chuyển gần như hoàn toàn để std::function, cùng là với boost::shared_ptrCó chuẩn C++ 11 cung cấp thứ gì đó như boost :: any?

Nhưng tôi không thể tìm thấy std::any? Nó đã được đổi tên hay không được đặt trong tiêu chuẩn mới ở tất cả các lý do?

+13

số (và phụ) –

+0

Không phải mọi thứ trong thúc đẩy đã được chuyển đến std tuy nhiên không có gì ngăn cản bạn sử dụng nó tăng cường.Tôi đoán một số thư viện tăng có thể được viết lại cho C++ 11, một số có thể được loại bỏ hoàn toàn là khá dư thừa, mặc dù họ có thể sẽ vẫn có sẵn cho khả năng tương thích ngược. – CashCow

Trả lời

15

Không phải mọi thư viện từ tăng đều làm cho nó trở thành tiêu chuẩn (và thậm chí cả những thư viện có thể đã xóa thành phần). Nói chung các commitee là khá bảo thủ khi nói đến việc thêm vào các standardlibrary (vì nó bên cạnh không thể có được một cái gì đó loại bỏ tại một điểm sau này nếu bao gồm là một sai lầm (.e.g. Bởi vì có một lựa chọn tốt hơn)).

boost::functionboost::shared_ptr nơi có nhiều nội dung được đưa vào kể từ khi chúng đã là một phần của tr1. Mặt khác, boost::any không cắt. Tuy nhiên, nó có thể được đưa vào thư viện chuẩn sau này (ví dụ: trong báo cáo kỹ thuật tiếp theo, xem here). Mặc dù boost::any thật tuyệt, tôi sẽ không đánh giá nó là điều quan trọng như ví dụ: shared_ptr.

Kết luận: boost::any không phải là một phần của C++ 11, kể từ khi Ủy ban đã không thấy bất kỳ nhu cầu cấp bách để đưa nó

+2

có thể bạn có thể cập nhật câu trả lời của mình để phản ánh 17 thay đổi :) –

3

Tôi nghĩ vị trí mặc định là thư viện sẽ KHÔNG được bao gồm trong tiêu chuẩn mới trừ khi nó được đệ trình để được đưa vào và sau đó thông qua ủy ban.

Tôi không chắc chắn nếu tăng :: bất kỳ đã từng được gửi. Chắc là không. Tuy nhiên bạn vẫn có thể sử dụng boost :: any.

Tôi đoán là với thư viện tăng C++ 11 sẽ được viết lại, một số sẽ được coi là dư thừa và một số khác sẽ được thay đổi để sử dụng ngữ nghĩa di chuyển, danh sách khởi tạo và tự động, được viết theo kiểu C++ 11 với C + +11 tính năng.

Hầu hết các thư viện mới có khả năng sẽ có trong C++ 11 nhưng các gói tăng cường hiện tại sẽ được lưu giữ trong một thời gian tới vì nhiều người sẽ không chuyển sang trình biên dịch C++ 11. Tôi cũng đoán rằng chỉ có các tính năng của C++ 11 được thực hiện bởi tất cả các trình biên dịch chính sẽ đi vào gói đầu tiên.

Đây có lẽ là một câu hỏi dành cho người lập trình hơn stackoverflow, và thậm chí tốt hơn cho comp.std.C++, kiểm duyệt và tăng danh sách gửi thư.

16

Vì câu hỏi đã được hỏi, chúng tôi nâng cao hướng tới tiêu chuẩn :: thử nghiệm :: bất kỳ tính năng nào như một tính năng optional đã bỏ phiếu trong tiêu chuẩn C++ 14.

Sau đó, ít nhất là implemented trong GCC 5.1.

Tính năng này kể từ đó được chuẩn hóa trong C++ 17 dẫn đến std::any. Xem thêm std::variant của C++ 17 cho một liên minh an toàn loại, hoặc giữ một trong những loại thay thế được biết đến hạn chế, hoặc trống (nhờ remy-lebeau cho đầu).

+2

['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) (tương tự như' boost :: variant') cũng đã được chuẩn hóa và sẽ xuất hiện trong C++ 17. –

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