Der arithmetische Eingabe-Operator für std::basic_istream
hat non-virtual overloads for all 8 integer types (nicht Listing Zeichen, die unterschiedlich ohnehin behandelt werden), und es ruft num_get::get
, die einzelnen virtual overloads for 6 of them (fehlende signierte Versionen von kurzem und int) für std::basic_ostream
Warum sind num_get und num_put asymmetrisch?
Der Arithmetik-Operator hat hat auch non-virtual overloads for all 8 integer types, und es ruft num_put::put
, die nur virtual overloads for 4 types, die long
, long long
und ihre unsignierten Varianten sind. Bei den kleineren Typen führt der Einfügeoperator ganzzahlige Aktionen durch.
Warum eine Lücke in was sonst eine Tour-De-Force der Benutzererweiterbarkeit? Es scheint unmöglich zu sein, eine benutzerdefinierte Handhabung für jeden Integer-Typ bereitzustellen (z. B. um eine typerhaltende Serialisierungsbibliothek über der Iostream-Schnittstelle aufzubauen), und außerdem ist sie asymmetrisch. Es hätte mit wenig Aufwand erreicht werden können. Gibt es einen Kompromiss?
Aber die Absicht der Frage war zu fragen, warum Modularität gegen - z. benutzerdefiniertes num_put und num_get, das binäre E/A mit den formatierten Eingabe-/Ausgabeoperatoren erlaubte. –
@ LB--: Ich glaube, das ist in beiden Antworten ausreichend erklärt. Was hast du vermisst? –
Ich sehe nicht, wie die Begründung gilt, wenn man Typinformation in 'num_put' erhalten will, wie für die binäre Ausgabe. –