2016-04-20 15 views
6

Se io uso questo codice:Ottenere l'ultimo carattere in una stringstream senza copiare tutto il suo buffer

template <typename Streamable> 
/* ... */ 
std::stringstream ss; 
ss << function_yielding_a_Streamable(); 
auto last_char = ss.str().back(); 

quindi (credo) una copia della stringa nel buffer di ss s' deve essere creato, basta per me per ottenere l'ultimo personaggio, e sarà quindi distrutto. Posso fare qualcosa di meglio, invece? Forse usando il metodo seekp()?

+1

Perché mettere il 'STRING' nel' stringstream' in primo luogo? – Sean

+0

@Sean: domanda giusta, vedi modifica. – einpoklum

+0

Presumibilmente, non * deve * essere un 'stringstream'? Forse potresti invece usare un flusso personalizzato. – user2079303

risposta

6

Si potrebbe fare qualcosa di simile:

char last_char; 
std::stringstream ss; 
ss << function_yielding_a_Streamable(); 
ss.seekg(-1,ios::end);//get to the last character in the buffer 
ss>>last_char; 
+0

Non avrei quindi bisogno di cercare nuovamente (ad esempio se lo avvolgo in una funzione che prende un ostringstream e che voglio agire in modo pulito)? – einpoklum

+0

@einpoklum scusa per il replay in ritardo, credo che puoi farlo usando * seekp (0) * per cercare di iniziare per l'inserimento. Suppongo che intendessi dire passare * stringstream e * piuttosto che * ostringstream & * poiché con quest'ultimo non puoi accedere all'estrazione * operatore >> * per leggere l'ultimo carattere. –

Problemi correlati