L'operatore di estrazione aritmetica per std::basic_istream
trovi non-virtual overloads for all 8 integer types (caratteri non dell'annuncio che vengono gestiti in modo diverso comunque), e chiama num_get::get
, che ha singoli virtual overloads for 6 of them (mancanti versioni firmate di breve e int)Perché num_get e num_put sono asimmetrici?
L'operatore di inserimento aritmetica per std::basic_ostream
ha anche non-virtual overloads for all 8 integer types e chiama num_put::put
, che ha solo virtual overloads for 4 types, che sono long
, long long
e le loro varianti senza segno. Per i tipi più piccoli, l'operatore di inserimento esegue promozioni intere.
Perché un vuoto in ciò che è altrimenti un tour-de-force dell'estensibilità dell'utente? Sembra impossibile fornire una gestione definita dall'utente per ogni tipo di intero (ad es. Per costruire una libreria di serializzazione di preservazione del tipo in cima all'interfaccia di iostream), e più difficile, è asimmetrica. Potrebbe essere stato realizzato con poco sforzo. C'è un compromesso?
Ma l'intento della domanda era chiedere perché la modularità è stata decisa contro - ad es. num_put e num_get personalizzati che consentivano l'I/O binario con gli operatori di input/output formattati. –
@ LB--: Credo che sia sufficientemente spiegato in entrambe le risposte. Cosa ti sei perso? –
Non vedo come si applica la logica quando si desidera conservare le informazioni sul tipo in 'num_put', ad esempio per l'output binario. –