2012-03-22 25 views
13

Tôi đang tìm kiếm một giải pháp thay thế cho công đoàn kiểu C. boost :: variant là một lựa chọn như vậy. Có bất cứ điều gì trong std C + +?Tương đương với tăng :: biến thể trong thư viện chuẩn C++ là gì?

union { 
    int i; 
    double d; 
} 
+1

Không có, nhưng Boost.Variant rất có khả năng ở TR2. – ildjarn

+1

Đáng buồn thay, hầu hết tăng không có tương đương 'std'. –

+9

Không có gì sai khi sử dụng Boost. Toàn bộ điểm của C++ là nó cho phép bạn viết các thư viện làm những việc hữu ích. Nó không cố gắng cung cấp mọi thứ ra khỏi hộp, mà đúng hơn, nó cung cấp cho bạn các công cụ để * làm * mọi thứ bạn cần. Sử dụng Boost. –

Trả lời

24

Như nhiều người bình luận đã nói: Không, không có biến thể tăng giá giống nhau trong C++ chuẩn. Có lẽ trong một vài năm sẽ có, nhưng tại sao chờ đợi - sử dụng Boost Variant ngày hôm nay!


Sửa (bốn năm sau, năm 2016): Trong C++ 17 sẽ có std::variant. Tương tự nhưng không giống với boost::variant. Vì vậy, khi trình biên dịch của bạn hỗ trợ C++ 17, bạn sẽ có một giải pháp trong thư viện chuẩn.

+0

Làm cách nào để điều này được coi là câu trả lời? Đây là một bình luận. –

+0

Câu trả lời này sẽ sớm bị lỗi thời. C++ 17 sẽ bao gồm 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman

+0

@TimZaman: Cảm ơn bạn đã nhắc nhở. Tôi đã thêm bản chỉnh sửa để ghi chú hỗ trợ C++ 17. –

10

Một vài năm trôi qua: Bây giờ a proposal đang được thực hiện. Có thể boost::variant sẽ biến nó thành C++ 17! Cho đến lúc đó chúng tôi sẽ phải sống với boost::variant mà vẫn tuyệt vời. Lưu ý rằng sẽ có một số thay đổi trong các chi tiết trong std::variant.

CẬP NHẬT: Đề xuất đã thực hiện. std::variant sẽ là một phần của tiêu chuẩn C++ 17 mới. Đây là số June 2016 meeting report by Herb Sutter. Ở đó anh ta xác nhận nó.

+0

Bạn có thể liệt kê một số thay đổi này không? – einpoklum

+0

Các thay đổi vẫn có thể thay đổi. ;) Một số thay đổi đang gây tranh cãi. Ngoài ra nó không phải là trên bề mặt nhưng có một số quyết định thiết kế phức tạp. Để không làm phức tạp câu trả lời không cần thiết, tôi đã chọn để súc tích và cho điểm. Có thể tìm thấy một số vấn đề trong liên kết đến đề xuất trong câu trả lời của tôi. –

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