2016-04-20 18 views
6

Wenn ich diesen Code verwenden:Beziehen das letzte Zeichen in einem string ohne seinen gesamten Puffer kopiert

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

dann (glaube ich) eine Kopie des Strings in ss ‚s Puffern benötigt, erstellt wird, nur Damit ich das letzte Zeichen bekomme, wird es zerstört. Kann ich stattdessen etwas Besseres tun? Vielleicht mit der seekp() Methode?

+1

Warum die 'in den' stringstream' in erster Linie string' setzen? – Sean

+0

@Sean: Faire Frage, siehe Bearbeiten. – einpoklum

+0

Vermutlich muss es kein "stringstream" sein? Vielleicht könnten Sie stattdessen einen benutzerdefinierten Stream verwenden. – user2079303

Antwort

6

Man könnte so etwas tun:

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

Müsste ich dann nicht auch zurück suchen (z. B. wenn ich dies in eine Funktion einpacke, die einen ostringstream nimmt und den ich sauber darstellen will)? – einpoklum

+0

@einpoklum Entschuldigung für die späte Wiedergabe, ich glaube, Sie können das tun, indem Sie * seekp (0) * an den Anfang zum Einfügen suchen. Ich nehme an, Sie wollten pass * stringstream & * sagen und nicht * ostringstream & *, da Sie mit letzterem nicht auf den extraktion * operator >> * zugreifen können, um das letzte Zeichen zu lesen. –