non so se quello che sto scrivendo un senso ma ricordate che ho visto una funzione ivoked come questo:è possibile passare stringstream come parametro di funzione?
my_func(ss << "text" << hex << 33);
E 'possibile?
non so se quello che sto scrivendo un senso ma ricordate che ho visto una funzione ivoked come questo:è possibile passare stringstream come parametro di funzione?
my_func(ss << "text" << hex << 33);
E 'possibile?
Sicuro. Perché non dovrebbe essere? Esempio di dichiarazione di tale funzione:
void my_func(std::ostringstream& ss);
grazie, che quello che mi è mancato, sapevo che era un po 'possibile ma non sapevo quale dichiarazione usare per ottenere quell'effetto – rsk82
Tranne che il tipo di 's" << test "<< hex << 33' non è 'std :: stringstream &', ma 'std :: ostream &', e questo non corrisponderà alla firma data. –
@James Kanze Ovviamente è corretto. –
Assolutamente! Assicurati di passarlo per riferimento, non per valore.
void my_func(ostream& stream) {
stream << "Hello!";
}
Sì, lo è, e
Function(expresion)
renderà l'espressione da valutare prima e il risultato verrà passato come parametro
Nota: Operator << for ostreams restituisce un ostream
my_func
deve avere una firma simile a:
void my_func(std::ostream& s);
, poiché questo è il tipo di ss << "text" << hex << 33
. Se l'obiettivo è per estrarre la stringa generata, you'ld hanno a che fare qualcosa di simile:
void
my_func(std::ostream& s)
{
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
}
Nota anche che non è possibile utilizzare un flusso temporanea;
my_func(std::ostringstream() << "text" << hex << 33);
non verrà compilato (tranne forse con VC++), poiché non è legale C++. Si potrebbe scrivere qualcosa di simile:
my_func(std::ostringstream().flush() << "text" << hex << 33);
se si voleva utilizzare una temporanea. Ma non è molto facile da usare.
Non dovrebbe essere così difficile provarlo? – aztaroth