Trong khi thực hiệnstd::experimental::optional
(cppreference.com) tôi đã nhầm lẫn bởi các đặc điểm kỹ thuật của một nhà xây dựng cụ thể, cụ thể là:std :: nghiệm :: tùy chọn <T> thực hiện: Constexpr constructor nhầm lẫn
constexpr optional(const T& value); // (4)
(Source)
Công cụ xây dựng này cho phép optional<T>
, cho loại có thể bị phá hủy tầm thường T
, được xây dựng theo ngữ cảnh constexpr
. Trong khi yêu cầu đầu tiên, cụ thể là tắt chức năng destructor do người dùng cung cấp trong trường hợp này để làm cho optional<T>
một loại chữ, thẳng về phía trước để giải quyết, tôi không biết cách để tránh giới hạn vị trí mới không được phép trong constexpr .
Tôi nghĩ mình phải triển khai optional<T>
sử dụng std::aligned_storage<T>
để cho phép các loại T
không được định cấu hình mặc định và đáp ứng mọi yêu cầu căn chỉnh, nếu có. Nhưng như tôi đã nói, constexpr
cấm tôi sử dụng vị trí mới trong hàm tạo cụ thể đó.
Tôi có phải uống nhiều cà phê và không thấy giải pháp rõ ràng ở đây không?
Cảm ơn bạn
Bản sao có thể có của [Làm thế nào nên sử dụng std :: optional?] (Http://stackoverflow.com/questions/16860960/how-should-one- sử dụng-stdoptional) – Matriac
@Matriac đây là câu hỏi về phía thực hiện. – nshct
Một 'union' có thể làm việc cho constructor cụ thể này, nhưng tôi không tự tin nó sẽ đủ để xử lý tất cả các trường hợp. – hvd