Supponiamo di voler inserire throw
con una stringa contenente informazioni su alcuni oggetti, ma l'implementazione dell'oggetto ha solo un sovraccarico per l'operatore di flusso (<<
) anziché un cast per stringa. Voglio fare qualcosa di simile:Posso richiamare il sovraccarico dell'operatore di flusso senza un oggetto flusso?
throw std::runtime_error("Error, encountered invalid value " + x);
dove x
è un'istanza di un tipo che ha (<<
) sovraccarico. Quanto sopra non funziona, tuttavia, poiché lo +
non è sovraccarico su un tipo compatibile con const char*
. Se x
erano una stringa (o calcinabile a una stringa) che avrebbe funzionato, ma invece devo fare questo:
std::stringstream s;
s << "Error, encountered invalid value " << x;
throw std::runtime_error(s.str());
Come posso ottenere qualcosa di più conciso come il primo esempio senza l'aggiunta di eventuali sovraccarichi o funzioni personalizzate. La libreria standard fornisce alcune funzionalità che aiuteranno qui?
sovraccarico 'operatore + (std :: string &, X &)' – 101010
può non sovraccaricare il + per aggiungere una stringa all'oggetto? – MiltoxBeyond
@MiltoxBeyond Potrei, ma sto facendo la domanda per vedere se è possibile farlo senza scrivere nuove funzioni/sovraccarichi. – arman