Ho una classe semantica di valore che mi piacerebbe essere "visualizzabile" nello stesso senso della classe Haskells Show
o Python fornisce una funzione universale __str__()
.Best practice per rendere la classe C++ "Showable" (stringa, ostream)
in C++:
- ho potuto sovraccaricare
operator<<(ostream&, ...)
quindi in grado di produrre la mia classe di esempiocout
- ho potuto sovraccaricare
operator std::string()
così la mia classe converte in std :: string - ho potuto sovraccaricare
operator const char*()
così la mia classe converte in const char *. - ho potuto scrivere un membro
str()
, o una funzioneto_string(...)
libera
Ciascuna di queste funzioni potrebbero essere definite in termini di altro. È un'opzione migliore rispetto alle altre? Sono tutte queste opzioni? Quale sarebbe il modo più elegante di fare questo dato C++ 11/14/17?
Sì, temevo che la domanda fosse troppo aperta, ma osavo comunque. Qual è la tua ragione per 'str()' e 'to_string()' per usare l'operatore '' internamente e non viceversa? –
Ah, suppongo che intenda la preferenza su es. stringstream sopra la concatenazione manuale di stringhe. Nel qual caso la scelta per l'operatore << 'ha senso. –
@StijnFrishert, esattamente. È difficile serializzare una classe complessa con una semplice concatenazione di stringhe. – SergeyA