Warum sind num_get und num_put asymmetrisch?

8

Der arithmetische Extraktionsoperator für std::basic_istream hat nicht virtuelle Überladungen für alle 8 Integer-Typen (es werden keine Zeichen aufgelistet, die sowieso anders behandelt werden), und es ruft num_get::get auf, das individuelle virtuelle Überladungen für 6 von ihnen (fehlende signierte Versionen von short und int)

Der arithmetische Insertionsoperator für std::basic_ostream hat auch nicht-virtuelle Überladungen für alle 8 Integer-Typen , und es ruft num_put::put auf, das nur virtuelle Überladungen für 4 Typen aufweist sind long , long long und ihre unsignierten Varianten. Bei den kleineren Typen führt der Einfügeoperator Ganzzahlpromotionen durch.

Warum eine Lücke in der sonst üblichen 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?

    
Cubbi 09.04.2013, 17:44
quelle

2 Antworten

4

Nach Standard C ++ Iostreams und Locales :

  

Auf den ersten Blick könnte es so aussehen, als ob Versionen von put () kurz, int,   oder float fehlen. Die Absicht war, die Schnittstelle der   Standard Library Concise, und ein Wert des Typs short oder int kann sein   gehandhabt durch die Version von lang. Ähnlich kann ein Wert vom Typ float sein   mit der put () - Version von double behandelt werden.

und dann später über num_get::get() :

  

Wieder, wie bei num_put :: put (), die Typen, die nicht absolut sind   notwendig sind weggelassen.

    
Jesse Good 09.04.2013, 18:14
quelle
4

Wenn Sie Werte lesen, müssen Sie Überläufe zulassen, daher brauchen Sie für jeden Typ einen Extraktor. Wenn Sie Werte schreiben, tun Sie dies nicht, daher ist der größte Typ ausreichend. Früher war der größte Typ long . Wenn long long hinzugefügt wurde, wurde die Version für long aus Gründen der Abwärtskompatibilität beibehalten.

    
Pete Becker 09.04.2013 18:05
quelle

Tags und Links