<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[stringstream verketten]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">void print_string ( stringstream&amp; ss )
{
	cout &lt;&lt; ss.str();
}

int main ( int arg, char* argv[] )
{

	stringstream ss; 
	print_string( ss &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl );
	return 0;
}
</code></pre>
<p>Obiges bedingt die Ausgabe:</p>
<blockquote>
<p>print_string': Konvertierung des Parameters 1 von 'std::basic_ostream&lt;_Elem,_Traits&gt;' in 'std::stringstream &amp;' nicht möglich</p>
</blockquote>
<p>So geht es zwar:</p>
<pre><code class="language-cpp">ss &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;
	print_string(ss);
</code></pre>
<p>aber kann man das irgendwie drehen, das es mit einer Zeile funzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246967/stringstream-verketten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 18:23:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246967.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Aug 2009 12:12:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:12:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">void print_string ( stringstream&amp; ss )
{
	cout &lt;&lt; ss.str();
}

int main ( int arg, char* argv[] )
{

	stringstream ss; 
	print_string( ss &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl );
	return 0;
}
</code></pre>
<p>Obiges bedingt die Ausgabe:</p>
<blockquote>
<p>print_string': Konvertierung des Parameters 1 von 'std::basic_ostream&lt;_Elem,_Traits&gt;' in 'std::stringstream &amp;' nicht möglich</p>
</blockquote>
<p>So geht es zwar:</p>
<pre><code class="language-cpp">ss &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;
	print_string(ss);
</code></pre>
<p>aber kann man das irgendwie drehen, das es mit einer Zeile funzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755043</guid><dc:creator><![CDATA[verkett0r]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:30:58 GMT]]></title><description><![CDATA[<p>Natürlich geht das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Aber eigentlich ist so etwas nicht schön...</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;iostream&gt;

void print_string ( std::stringstream&amp; ss )
{
    std::cout &lt;&lt; ss.str();
}

int main ( int arg, char* argv[] )
{

    std::stringstream ss;
	print_string( (ss &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; std::endl, ss) );

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1755052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755052</guid><dc:creator><![CDATA[BBBB]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:36:02 GMT]]></title><description><![CDATA[<p>So würde es gehen:</p>
<pre><code class="language-cpp">void print_string ( std::basic_ios&lt; char &gt;&amp; ss )
{
    cout &lt;&lt; ss.rdbuf();
}
</code></pre>
<p>... aber das print_string() ist ziemlich sinnlos.</p>
<p>Warum nicht gleich:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755057</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:42:14 GMT]]></title><description><![CDATA[<p>BBBB schrieb:</p>
<blockquote>
<p>Natürlich geht das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Aber eigentlich ist so etwas nicht schön...</p>
</blockquote>
<p>wieso nicht?</p>
<p>Werner_logoff schrieb:</p>
<blockquote>
<p>So würde es gehen:</p>
<pre><code class="language-cpp">void print_string ( std::basic_ios&lt; char &gt;&amp; ss )
{
    cout &lt;&lt; ss.rdbuf();
}
</code></pre>
<p>... aber das print_string() ist ziemlich sinnlos.</p>
<p>Warum nicht gleich:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;
</code></pre>
<p>?</p>
</blockquote>
<p>weil es im projekt nur eine 'zentrale printfunktion' gibt, die je nach system ausgaben macht. an diese zentrale funktion soll ein fertiges objekt übergeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755062</guid><dc:creator><![CDATA[verkett0r]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:50:20 GMT]]></title><description><![CDATA[<p>verkett0r schrieb:</p>
<blockquote>
<p>weil es im projekt nur eine 'zentrale printfunktion' gibt, die je nach system ausgaben macht. an diese zentrale funktion soll ein fertiges objekt übergeben werden.</p>
</blockquote>
<p>.. dann bietet es sich eher an, ein eigenes ostream-Objekt zur Verfügung zu stellen (oder auch std::clog dazu zu benutzen), und dieses Objekt je nach Anforderung auf den gewünschten streambuf umzuschalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755068</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 12:54:46 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<p>verkett0r schrieb:</p>
<blockquote>
<p>weil es im projekt nur eine 'zentrale printfunktion' gibt, die je nach system ausgaben macht. an diese zentrale funktion soll ein fertiges objekt übergeben werden.</p>
</blockquote>
<p>.. dann bietet es sich eher an, ein eigenes ostream-Objekt zur Verfügung zu stellen (oder auch std::clog dazu zu benutzen), und dieses Objekt je nach Anforderung auf den gewünschten streambuf umzuschalten.</p>
</blockquote>
<p>Bin zwar kein totaler Anfänger, aber dafür reichen meine Kenntnisse leider nicht aus, hast du mal nen Link oder nen Ansatz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755071</guid><dc:creator><![CDATA[verkett0r]]></dc:creator><pubDate>Tue, 04 Aug 2009 12:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 13:13:03 GMT]]></title><description><![CDATA[<p>das kann so aussehen - alles nach cout:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main ( int arg, char* argv[] )
{
    streambuf* old_one = clog.rdbuf( cout.rdbuf() );

    // --   Programm
    clog &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;

    // --   vorm beenden streambuf wieder herstellen
    clog.rdbuf( old_one );
    return 0;
}
</code></pre>
<p>oder in eine Datei</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main ( int arg, char* argv[] )
{
    ofstream logfile(&quot;logfile.txt&quot;);
    streambuf* old_one = clog.rdbuf( logfile.rdbuf() );

    // --   Programm
    clog &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;

    // --   vorm beenden streambuf wieder herstellen
    clog.rdbuf( old_one );
    return 0;
}
</code></pre>
<p>oder nirgendwo hin</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;streambuf&gt;
using namespace std;

struct Nirvana : std::streambuf
{
    Nirvana() {}
};

int main ( int arg, char* argv[] )
{
    Nirvana nirvana; // nirgendwo hin
    streambuf* old_one = clog.rdbuf( &amp;nirvana );

    // --   Programm
    clog &lt;&lt; &quot;hello&quot; &lt;&lt; &quot; u &quot; &lt;&lt; 2 &lt;&lt; endl;

    // --   vorm beenden streambuf wieder herstellen
    clog.rdbuf( old_one );
    return 0;
}
</code></pre>
<p>Sonst siehe auch, wie das <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1105513.html#1105513" rel="nofollow">Umschalten des streambuf mit RAII</a> funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755083</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 04 Aug 2009 13:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Tue, 04 Aug 2009 18:28:45 GMT]]></title><description><![CDATA[<p>Vielen Dank!<br />
Die erste Lösung passt mir am besten in den Kram, dazu hätte ich noch eine Frage. Die Funktion <em>make_message</em> konvertiert in einen String:</p>
<pre><code class="language-cpp">static string message_buffer;
void make_message ( basic_ios &lt;char&gt;&amp; ss ) 
{ 
	stringstream aa; 
	aa &lt;&lt;  ss.rdbuf();
	message_buffer = aa.str();
	ss.clear();
}
</code></pre>
<p>Jetzt bin ich einem Rätsel auf der Spur:</p>
<pre><code class="language-cpp">stringstream ss; 
	make_message ( ss &lt;&lt; &quot;That's&quot; &lt;&lt; 2 &lt;&lt; &quot; deep for me.&quot; &lt;&lt; endl  );
	cout &lt;&lt; message_buffer;
	cout &lt;&lt; ss.rdbuf();
	cout &lt;&lt; message_buffer;
</code></pre>
<p>Obiges bewirkt eine einmalige Ausgabe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Kömmentiere ich allderdings die Zeile <em>cout &lt;&lt; ss.rdbuf();</em><br />
aus, dann wird wie erwartet zweimal ausgegeben! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Die Zeile <em>cout &lt;&lt; ss.rdbuf();</em> scheint die Variable message_buffer zu löschen! Das ist doch nicht normal?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755275</guid><dc:creator><![CDATA[verkett0r]]></dc:creator><pubDate>Tue, 04 Aug 2009 18:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Wed, 05 Aug 2009 19:57:01 GMT]]></title><description><![CDATA[<p>verkett0r schrieb:</p>
<blockquote>
<p>Vielen Dank!<br />
Die erste Lösung passt mir am besten in den Kram,</p>
</blockquote>
<p>warum eigentlich?</p>
<p>verkett0r schrieb:</p>
<blockquote>
<p>dazu hätte ich noch eine Frage. Die Funktion <em>make_message</em> konvertiert in einen String:</p>
<pre><code class="language-cpp">static string message_buffer;
void make_message ( basic_ios &lt;char&gt;&amp; ss ) 
{ 
	stringstream aa; 
	aa &lt;&lt;  ss.rdbuf();
	message_buffer = aa.str();
	ss.clear();
}
</code></pre>
</blockquote>
<p>bei Aufruf der make_message-Funktion werden alle Zeichen in den string von 'ss' geschrieben. In Zeile 5 werden die Zeichen in den string von 'aa' kopiert. Anschließend wird in Zeile 6 der Inhalt von 'aa' in die string message_buffer kopiert. Ist irgendwie ziemlich umständlich - oder?</p>
<p>verkett0r schrieb:</p>
<blockquote>
<p>Jetzt bin ich einem Rätsel auf der Spur:</p>
<pre><code class="language-cpp">stringstream ss; 
	make_message ( ss &lt;&lt; &quot;That's&quot; &lt;&lt; 2 &lt;&lt; &quot; deep for me.&quot; &lt;&lt; endl  );
	cout &lt;&lt; message_buffer;
	cout &lt;&lt; ss.rdbuf();
	cout &lt;&lt; message_buffer;
</code></pre>
<p>Obiges bewirkt eine einmalige Ausgabe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Kömmentiere ich allderdings die Zeile <em>cout &lt;&lt; ss.rdbuf();</em><br />
aus, dann wird wie erwartet zweimal ausgegeben! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Die Zeile <em>cout &lt;&lt; ss.rdbuf();</em> scheint die Variable message_buffer zu löschen! Das ist doch nicht normal?!</p>
</blockquote>
<p>Doch - um genauer zu sein, das ist C++-Standard. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /><br />
mit 'make_message' landet die Ausgabe nach zwei weiteren Kopien (s.o.) in der Variablen 'message_buffer'. Der wird anschließend ausgegeben. Dann wird der Rest aus 'ss' auf cout ausgegeben. Da ist der Lesezeiger intern aber schon auf EOF positioniert, da der Inhalt von 'ss' bereits innerhalb von make_message ausgegeben wurde; damit wird dann der Status von cout auf 'fail' gesetzt, und die nächste Ausgabe wird erst nach einem cout.clear() wieder möglich.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755972</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 05 Aug 2009 19:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream verketten on Thu, 06 Aug 2009 12:37:57 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>verkett0r schrieb:</p>
<blockquote>
<p>Vielen Dank!<br />
Die erste Lösung passt mir am besten in den Kram,</p>
</blockquote>
<p>warum eigentlich?</p>
</blockquote>
<p>Ich muss mich dann nicht um dieses streambuf Zeugs kümmern.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>bei Aufruf der make_message-Funktion werden alle Zeichen in den string von 'ss' geschrieben. In Zeile 5 werden die Zeichen in den string von 'aa' kopiert. Anschließend wird in Zeile 6 der Inhalt von 'aa' in die string message_buffer kopiert. Ist irgendwie ziemlich umständlich - oder?</p>
</blockquote>
<p>Ja, sieht umständlich aus. Wäre schön wenn es irgendwie direkt ginge.</p>
<p>Optimal wäre so etwas in der Art:</p>
<pre><code class="language-cpp">static string message;
string&amp; make_message ( /* ??? */ )
{
	// Assemble stuff ...
	return message;
}
string s = make_message ( &quot;Hallo &quot;, 1.2, &quot; Echo&quot;, &quot; Wurst.&quot; );
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756315</guid><dc:creator><![CDATA[verkeddärr]]></dc:creator><pubDate>Thu, 06 Aug 2009 12:37:57 GMT</pubDate></item></channel></rss>