visione personale e l'esperienza
io personalmente non disapprovano il confronto tra i diversi tipi. Lo incoraggio persino, poiché potrebbe migliorare la leggibilità del codice; fare ciò che stai facendo sembra più logico. Al di fuori dei tipi di numeri di base, e forse di una stringa e di un personaggio, trovo difficile darti un confronto logico di tipo intra, e non ricordo di averne incontrato molti. Ho incontrato un sacco di operatori aritmetici usati in questo modo però.
come usarli
Si dovrebbe essere cauti con quello che stai facendo, essi sono utilizzati a malapena per un motivo. Se offri una funzione per il confronto di due diversi tipi, il risultato dovrebbe essere logico e ciò che l'utente si aspetta intuitivamente. È anche desiderabile scrivere una buona documentazione per questo. Mark Ransom l'ha già detto, ma è positivo che gli utenti possano confrontarsi in entrambe le direzioni.Se ritieni che il tuo confronto non sia sufficientemente chiaro con un operatore, dovresti pensare a usare una funzione con nome. Questa è anche un'ottima soluzione se il tuo operatore può avere più significati.
cosa può andare storto
Non avete il pieno controllo su ciò che l'utente farà con quello che hai scritto. tletnes ha dato un buon esempio di ciò, dove sono confrontati due interi, ma il risultato non ha significato. In contraddizione con questo, il confronto tra due diversi tipi può essere molto giusto. Un float e un intero che rappresentano entrambi i secondi, possono essere ben confrontati.
operatori aritmetici
vicino al logico, vorrei mostrare un esempio intra-tipo con operatori aritmetici. Gli operatori aritmetici sono molto simili agli operatori logici quando parlano dell'utilizzo intra-tipo.
Supponiamo di avere un operatore + per un vettore a due dimensioni e un quadrato. Cosa fa questo? L'utente potrebbe pensare di ridimensionare il quadrato, ma un altro utente è sicuro che traduca! Questi tipi di problemi possono essere molto frustranti per i tuoi utenti. Puoi risolvere questo problema fornendo una buona documentazione, ma quello che personalmente preferisco, è specificamente chiamato funzioni, come Traduci.
Conclusione
intra-operatori logici di tipo possono essere utili e rendere il codice pulito, ma l'uso cattivo rende tutto solo più complicato.
fonte
2013-07-09 14:47:02
A seconda di chi manterrà il codice :) Mi piacerebbe implementarlo come metodo di classe, ad esempio BarType :: CompareToEpoch. A proposito, int lungo sarebbe meglio del doppio per misurare i secondi da epoca ... – Alex1985
Penso che la ragione per cui è stata messa in attesa sarà la vostra risposta. – ChiefTwoPencils
Direi di sì, poiché 'operator == (const FooType &)' dovrebbe probabilmente essere un metodo della classe 'BarType', non una funzione. – chepner