Nhà điều hành khai thác số học cho std::basic_istream
có non-virtual overloads for all 8 integer types (không niêm yết chars, được xử lý khác nhau anyway), và nó gọi num_get::get
, trong đó có cá nhân virtual overloads for 6 of them (thiếu phiên bản có chữ ký của ngắn và int)Tại sao num_get và num_put không đối xứng?
Toán tử chèn số học cho std::basic_ostream
cũng có non-virtual overloads for all 8 integer types và gọi là num_put::put
, chỉ có virtual overloads for 4 types, là long
, long long
và các biến thể chưa được ký của chúng. Đối với các loại nhỏ hơn, toán tử chèn thực hiện các chương trình khuyến mãi số nguyên.
Tại sao lại có một khoảng trống trong một hành trình mở rộng khả năng mở rộng của người dùng? Có vẻ như không thể cung cấp xử lý do người dùng xác định cho từng loại số nguyên (ví dụ: để xây dựng thư viện tuần tự lưu trữ kiểu trên đầu giao diện iostream) và moreso, nó không đối xứng. Nó có thể đạt được với ít nỗ lực. Có thương mại không?
Nhưng mục đích của câu hỏi là hỏi tại sao mô-đun được quyết định chống lại - ví dụ: tùy chỉnh num_put và num_get cho phép nhị phân I/O với các toán tử đầu vào/đầu ra được định dạng. –
@ LB--: Tôi tin rằng điều đó được giải thích đầy đủ trong cả hai câu trả lời. Bạn đã bỏ lỡ điều gì? –
Tôi không thấy lý do áp dụng như thế nào khi muốn giữ lại thông tin loại trong 'num_put', chẳng hạn như cho đầu ra nhị phân. –