Có rất nhiều thông tin có sẵn khi quá tải operator<<
để bắt chước phương thức kiểu toString()
chuyển đổi đối tượng phức tạp thành chuỗi. Tôi quan tâm đến việc cũng triển khai nghịch đảo, operator>>
để deserialize một chuỗi thành một đối tượng.Nhà điều hành luồng quá tải an toàn >>
Bằng cách kiểm tra nguồn STL
, tôi đã thu thập được rằng:
istream &operator>>(istream &, Object &);
sẽ là chức năng chữ ký chính xác cho deserializing một đối tượng kiểu Object
. Rất tiếc, tôi đã thua lỗ về cách triển khai đúng cách này - cụ thể cách xử lý lỗi:
- Làm cách nào để chỉ ra dữ liệu không hợp lệ trong luồng? Ném một ngoại lệ?
- Trạng thái luồng sẽ là gì nếu có là dữ liệu không đúng định dạng trong luồng?
- Có nên đặt lại cờ nào trước khi trả về tham chiếu cho chuỗi kết nối không?
Cũng đảm bảo bạn kiểm tra bit 'không' trước khi bạn thử làm bất kỳ điều gì. Nếu đã được đặt, chỉ cần trả lại luồng. – KTC
Cảm ơn lời khuyên, đặc biệt là sử dụng bit 'fail' thay vì ngoại lệ. Ngoài việc thiết lập bit không thành công, tôi có phải đảm bảo về nội dung của luồng không? Ví dụ: liệu luồng có bị thay đổi không nếu tôi đặt bit 'không'? –
Đó chính là điều tôi định nói, nhưng bạn đã trả lời nhanh hơn! Tôi muốn thêm rằng câu trả lời đúng được tìm thấy bằng cách tìm kiếm những gì hiện có đang thực hiện, đó là những gì bạn đang mô tả. Ngoài ra, tôi sẽ lưu ý rằng không có những thứ như dữ liệu không đúng định dạng, nhiều như định dạng sai để đọc nó; trong trường hợp đó, bạn muốn đảm bảo biến không thay đổi và (nếu bạn đặt bit không thành công và không phải là bit xấu) không có ký tự nào bị mất khỏi luồng. –