Arytmetyka operator ekstrakcji std::basic_istream
ma non-virtual overloads for all 8 integer types (nie zawierające wykaz znaków, które są obsługiwane w różny sposób w każdym razie), a to wywołuje num_get::get
, który posiada indywidualne virtual overloads for 6 of them (brakujące podpisane wersje krótkie i int)Dlaczego num_get i num_put są asymetryczne?
Arytmetyka operator wstawiania dla std::basic_ostream
ma także non-virtual overloads for all 8 integer types i wywołuje num_put::put
, który ma tylko virtual overloads for 4 types, które są long
, long long
i ich niepodpisane warianty. W przypadku mniejszych typów operator wstawiania wykonuje liczby całkowite.
Dlaczego luka w tym, co jest poza tym, jest siłą napędową rozszerzalności użytkownika? Wydaje się niemożliwe, aby zapewnić obsługę zdefiniowaną przez użytkownika dla każdego typu liczb całkowitych (np. W celu zbudowania biblioteki serializacji zachowującej typ na szczycie interfejsu iostream), a moreso - jest asymetryczny. Mogło to zostać osiągnięte przy niewielkim wysiłku. Czy istnieje kompromis?
Ale celem tego pytania było pytanie, dlaczego modularność została podjęta - np. custom num_put i num_get, które umożliwiły binarne operacje we/wy za pomocą sformatowanych operatorów wejścia/wyjścia. –
@ LB--: Uważam, że jest wystarczająco wyjaśnione w obu odpowiedziach. Czego przegapiłeś? –
Nie widzę, w jaki sposób uzasadnienie ma zastosowanie, gdy chce się zachować informacje o typie w wyrażeniu "num_put", na przykład dla wyjścia binarnego. –