2016-04-20 1 views
6

Si j'utilise ce code:Obtenir le dernier caractère dans un stringstream sans copier son tampon ensemble

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

alors (je crois) une copie de la chaîne dans un tampon de ss devra être créé, juste pour moi d'avoir le dernier personnage, et il sera ensuite détruit. Puis-je faire quelque chose de mieux à la place? Peut-être en utilisant la méthode seekp()?

+1

Pourquoi mettre le '' CHAINE' dans le stringstream' en premier lieu? – Sean

+0

@Sean: Question juste, voir modifier. – einpoklum

+0

Vraisemblablement, il ne faut * pas * être un 'stringstream'? Peut-être que vous pourriez utiliser un flux personnalisé à la place. – user2079303

Répondre

6

Vous pouvez faire quelque chose comme ceci:

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

N'aurais-je pas alors aussi besoin de revenir en arrière (par exemple si j'enveloppe ceci dans une fonction en prenant un autrtream et que je veux agir proprement)? – einpoklum

+0

@einpoklum désolé pour la relecture tardive, je crois que vous pouvez le faire en utilisant * seekp (0) * pour chercher au début pour l'insertion. Je suppose que vous vouliez dire pass * stringstream & * plutôt que * ostringstream & * car avec ce dernier vous ne pouvez pas accéder à l'opérateur * d'extraction * * pour lire le dernier caractère. –