<?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[Gibt es in C++ einen Stringstream den man wie ein string benutzen kann?]]></title><description><![CDATA[<p>Gibt es in C++ einen Stringstream den man wie ein string benutzen kann?</p>
<p>Ich möchte einen formatierten Ausgabetext ale Exception werfen, z.B.:</p>
<pre><code class="language-cpp">throw &quot;Error reading scan data: &quot; &lt;&lt; ErrorText(err) &lt;&lt; &quot;(&quot; &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; err &quot;)&quot;;
</code></pre>
<p>Das Beispiel geht so natürlich nicht. Ich will damit nur Zeigen das ich etwas brauche das wie ein Stream funktioniert, die Ausgabe in einen String leitet und mir den String zur weiteren Benutzung zur Verfügung stellt.</p>
<p>Ich hoffe ihr versteht was ich meine.</p>
<p>LG Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203292/gibt-es-in-c-einen-stringstream-den-man-wie-ein-string-benutzen-kann</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 12:11:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203292.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Jan 2008 11:02:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 11:03:38 GMT]]></title><description><![CDATA[<p>Gibt es in C++ einen Stringstream den man wie ein string benutzen kann?</p>
<p>Ich möchte einen formatierten Ausgabetext ale Exception werfen, z.B.:</p>
<pre><code class="language-cpp">throw &quot;Error reading scan data: &quot; &lt;&lt; ErrorText(err) &lt;&lt; &quot;(&quot; &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; err &quot;)&quot;;
</code></pre>
<p>Das Beispiel geht so natürlich nicht. Ich will damit nur Zeigen das ich etwas brauche das wie ein Stream funktioniert, die Ausgabe in einen String leitet und mir den String zur weiteren Benutzung zur Verfügung stellt.</p>
<p>Ich hoffe ihr versteht was ich meine.</p>
<p>LG Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440469</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Mon, 21 Jan 2008 11:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 11:05:12 GMT]]></title><description><![CDATA[<p>Wie wäre es mit std::stringstream?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440472</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 21 Jan 2008 11:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 11:07:09 GMT]]></title><description><![CDATA[<p>Ja, gibt es:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;

std::ostringstream os;

os &lt;&lt; &quot;Error reading scan data: &quot; &lt;&lt; ErrorText(err) &lt;&lt; &quot;(&quot; &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; err &quot;)&quot;;

std::string s = os.str();
</code></pre>
<p>Alternativ gibt es auch noch std::istringstream (für Eingaben) und std::stringstream (für Ein- und Ausgaben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440475</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 21 Jan 2008 11:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 14:02:17 GMT]]></title><description><![CDATA[<p>Danke, der Hinweis auf std::ostringstream ist schon richtig. Aber ich dachte es gibt eine ellegante Lösung ohne funktionalen Ansatz, so das man die Ausgabe direkt in die throw Anweisung schieben könnte. So brauche ich für jede Fehlermeldung drei Quelltextzeilen, was nicht gerade sehr übersichtlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440623</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Mon, 21 Jan 2008 14:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 14:05:04 GMT]]></title><description><![CDATA[<p>Dann pack das ganze in eine Funktion und dann ist es nur noch eine Zeile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440628</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 21 Jan 2008 14:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 14:06:25 GMT]]></title><description><![CDATA[<p>Du kannst dir dafür doch eine Funktion schreiben: ThrowError(...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440629</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 21 Jan 2008 14:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 14:50:07 GMT]]></title><description><![CDATA[<p>BerndD schrieb:</p>
<blockquote>
<p>So brauche ich für jede Fehlermeldung drei Quelltextzeilen, was nicht gerade sehr übersichtlich ist.</p>
</blockquote>
<pre><code class="language-cpp">throw static_cast&lt;std::ostringstream&amp;&gt;(std::ostringstream(&quot;Error reading scan data: &quot;) &lt;&lt; ErrorText(err)&lt;&lt;  &quot;(&quot; &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; err &quot;)&quot;).str();
</code></pre>
<p>Ist als Einzeiler noch weniger uebersichtlich *scnr*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440663</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 21 Jan 2008 14:50:07 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 14:59:31 GMT]]></title><description><![CDATA[<p>Außerdem sollte man keine Basisdatentypen als Exceptions werfen, sondern sich am besten eine Exception-Klasse (von std::exception abgeleitet) entwerfen, in der dann der string gehalten wird (und mittels exception::what() dann abgefragt werden kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440670</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 21 Jan 2008 14:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 16:02:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9348">@Th</a> &amp; Artchi: Wie soll das gehen? Ich kann doch nicht schreiben:</p>
<pre><code class="language-cpp">ThrowError( &quot;das ist &quot; &lt;&lt; &quot;nur &quot; &lt;&lt; &quot;ein Test!&quot; );
</code></pre>
<p>@all:<br />
Selbst pumuckl seine Lösung scheint daran zu scheitern. Es produziert die Fehlermeldung:<br />
&quot;error C2296: '&lt;&lt;' : illegal, left operand has type 'const char [26]'&quot;<br />
Der Compiler versucht also alles in den links stehenden String &quot;Error reading scan data: &quot; zu schieben. Schade, den wenn das gegangen wäre, hätte ich ja ein ThrowError Makro draus machen können.</p>
<p>Th schrieb:</p>
<blockquote>
<p>Außerdem sollte man keine Basisdatentypen als Exceptions werfen, sondern sich am besten eine Exception-Klasse (von std::exception abgeleitet) entwerfen, in der dann der string gehalten wird (und mittels exception::what() dann abgefragt werden kann).</p>
</blockquote>
<p>Meine Idee bedeutet doch, dass immer ein string geworfen wird. Muss ich dafür auch exception::what() überschreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440739</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Mon, 21 Jan 2008 16:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 16:21:48 GMT]]></title><description><![CDATA[<p>- Du sollst eben keinen string werfen, sondern eine exception. Die wird dann intern einen string haben, der die Rueckgabe von what() speichert. (Siehe eine beliebige C++-Referenz fuer Details)</p>
<p>- Meine Loesung compiliert bei mir fehlerlos, eventuell hast du beim abtippen was vergessen oder dein Compiler hat ne Macke (glaub ich aber eher nicht) Um das mal auseinanderzunehmen:<br />
-- <code>std::ostringstream(&quot;Error reading scan data: &quot;)</code> liefert einen ostringstream, in dem schon der entsprechende Teil vom Text steht.<br />
--der erste operator&lt;&lt; liefert eine Referenz auf einen ostream (der aber in wirklichkeit der ostringstream ist), so dass danach immer ostream::operator&lt;&lt;() aufgerufen wird.<br />
--da der letzte operator&lt;&lt; eine referenz auf ostream liefert, caste ich es zurueck auf den ostringstream (weil ich ja sicher sein kann dass es das ist, mit static_cast)<br />
-- auf die so erhaltene Referenz auf den ostringstream wende ich die str() methode an die einen string liefert<br />
==&gt; Nirgends ein const char* als linker operand.</p>
<p>- artchi hat gemeint, dass du eine Funktion schreiben sollst, die dir aus deinem err einen huebschen string baut und den dann wirft, statt jedesmal aus deinem Errorcode das ganze wieder von vonre zusammenzubasteln, rufst du nur die FUnktion auf und fertig:</p>
<pre><code class="language-cpp">void ThrowErr(myErrorClass const&amp; err) 
{
  std::ostringstream os;
  os &lt;&lt; &quot;Error reading scan data: &quot; &lt;&lt; ErrorText(err) 
     &lt;&lt; &quot;(&quot; &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; err &quot;)&quot;;
  std::string s = os.str();
  throw std::exception(s);
}
</code></pre>
<p>PS: es gibt auch Additionsoperatoren, um Strings zusammenzufrickeln...\</p>
<pre><code class="language-cpp">std::string s(std::string(&quot;das&quot;) + &quot; ist&quot; + &quot; ein&quot; + &quot; Test&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1440755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440755</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 21 Jan 2008 16:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 17:35:51 GMT]]></title><description><![CDATA[<p>Aha, jetzt verstehe ich dein 1. Vorschlag und habe ihn zum compilieren gebracht. Das mit err war nur ein Beispiel, ich meinte es universeller. Ich denke das habe ich nun mit deiner Hilfe geschafft (noch nicht getestet):</p>
<pre><code class="language-cpp">// Das Makro
#define ThrowError(msg) throw std::exception(static_cast&lt;std::ostringstream&amp;&gt;(std::ostringstream() &lt;&lt; msg).str().c_str())

// Und ein Aufrufbeispiel  
ThrowError( &quot;das ist ein Test&quot; &lt;&lt; std::hex &lt;&lt; std::setw(8) &lt;&lt; err &lt;&lt; &quot; blabla&quot; &lt;&lt; 4.56 &lt;&lt; foo());
</code></pre>
<p>Alleine hätte ich das nicht hinbekommen. Ich danke euch vielmals. Bin immer wieder begeistert von diesem Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440804</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Mon, 21 Jan 2008 17:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 17:40:07 GMT]]></title><description><![CDATA[<p>Funktioniert das denn auch? Ich meine das auch mal versucht zu haben, und der String enthielt hinterher nur eine Zahl, hexadezimal formatiert. Ich meine auch camper hätte damals angemerkt, dass das aus einer grundsätzlichen Sache im Aufbau der Standardbibliothek liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440807</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 21 Jan 2008 17:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 19:07:16 GMT]]></title><description><![CDATA[<p>Nach dem offiziellen C++ Standard gibt es keinen Konstruktor std::exception(const char *s). Dies ist nur eine Erweiterung bei einigen Compilern und außerdem muß dies dann ein konstanter String sein (kein temporäre Variable).</p>
<p>Man sollte immer eine von std::exception abgeleitete Klasse (z.B. std::logic_error, std::runtime_error, ..., oder aber eine selbstdef. Klasse) verwenden. Dessen Konstruktoren unterstützen dann auch (const std::string &amp;) als Parameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440870</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 21 Jan 2008 19:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 19:29:44 GMT]]></title><description><![CDATA[<p>boost::format</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440878</guid><dc:creator><![CDATA[Ardschi]]></dc:creator><pubDate>Mon, 21 Jan 2008 19:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Mon, 21 Jan 2008 21:29:34 GMT]]></title><description><![CDATA[<p>Ich denke das geht schon noch etwas eleganter:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;

class MyStringBuilder
{
public:
	template &lt;class T&gt; MyStringBuilder&amp; operator &lt;&lt;(T const&amp; t)
	{
		m_strstr &lt;&lt; t;
		return *this;
	}

	std::string str() const
	{
		return m_strstr.str();
	}

	operator std::string () const
	{
		return m_strstr.str();
	}

private:
	std::ostringstream m_strstr;
};

int main()
{
	try
	{
		throw std::runtime_error(MyStringBuilder() &lt;&lt; &quot;foo &quot; &lt;&lt; 1 &lt;&lt; &quot;, &quot; &lt;&lt; 2 &lt;&lt; &quot;, ...&quot;);
		// oder gleich
		throw std::runtime_error(str(boost::format(&quot;foo %1%, %2%, ...&quot;) % 1 % 2));
	}
	catch (std::runtime_error const&amp; e)
	{
		printf(&quot;exception: %s\n&quot;, e.what());
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1440946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440946</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 21 Jan 2008 21:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 06:25:35 GMT]]></title><description><![CDATA[<p>Alles schön und gut, aber selbst wenn man runtime_error nimmt funktioniert das ganze auf keiner meiner Implementierungen. Danach ist hustbaers Lösung nicht nur eleganter, sie funktioniert auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Folgendes Programm:</p>
<pre><code class="language-cpp">#include &lt;iomanip&gt;
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;
#include &lt;sstream&gt;

#define ThrowError(msg) throw std::runtime_error(static_cast&lt;std::ostringstream&amp;&gt;(std::ostringstream() &lt;&lt; msg).str())

int main()
{
    try {
        ThrowError( &quot;das ist ein Test&quot; &lt;&lt; std::hex &lt;&lt; std::setw(8) &lt;&lt; &quot; blabla&quot; &lt;&lt; 4.56 );
    } catch (std::exception const&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; std::endl;
    }
}
</code></pre>
<p>GCC 4.1 schrieb:</p>
<blockquote>
<p>0x4014f8 blabla4.56</p>
</blockquote>
<p>MSVC 8.0 schrieb:</p>
<blockquote>
<p>00417818 blabla4.56</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1441022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441022</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 22 Jan 2008 06:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 09:15:06 GMT]]></title><description><![CDATA[<p>Hatte ich mich tatsächlich zu früh gefreut. Aber das anliefern neuer Ideen geht ja hier fix :). Habe nun mit hustbaer sein Vorschlag ein Makro gebaut. Ich glaube sogar zu verstehen wie MyStringBuilder funktioniert. Selber würde ich den Syntax aber nicht hinbekommen. Ich verstehe nur nicht warum der Operator () überschrieben werden muss. Ich habe keine Vorstellung davon, wann dieser Operator zuschlägt.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;iomanip&gt;
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;
#include &lt;sstream&gt;

#include &lt;sstream&gt;

class MyStringBuilder
{
public:
    template &lt;class T&gt; MyStringBuilder&amp; operator &lt;&lt;(T const&amp; t)
    {
        m_strstr &lt;&lt; t;
        return *this;
    }

    std::string str() const
    {
        return m_strstr.str();
    }

    operator std::string () const
    {
        return m_strstr.str();
    }

private:
    std::ostringstream m_strstr;
};

#define ThrowError(msg) throw std::runtime_error(MyStringBuilder() &lt;&lt; msg); 

int main()
{
    try
    {
        ThrowError(&quot;foo &quot; &lt;&lt; 1 &lt;&lt; &quot;, &quot; &lt;&lt; 2 &lt;&lt; &quot;, ...&quot;);
    }
    catch (std::runtime_error const&amp; e)
    {
        printf(&quot;exception: %s\n&quot;, e.what());
    }
}
</code></pre>
<p>Diesmal getestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441096</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Tue, 22 Jan 2008 09:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 09:20:42 GMT]]></title><description><![CDATA[<p>Du überschreibst doch gar nicht den operator(), sondern den &quot;operator string&quot; (Konvertierungs-Operator) - und der schlägt zu, wenn du den StringBuilder an eine Funktion übergeben willst, die einen std::string erwartet (in diesem Fall der Ctor von std::runtime_error).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441098</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 22 Jan 2008 09:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 09:56:01 GMT]]></title><description><![CDATA[<p>Danke CStoll, wieder ein bisschen Licht ins Dunkle gebracht. Leider wird es nicht reichen das nächste mal selbstständig drauf zu kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441118</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Tue, 22 Jan 2008 09:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 10:13:48 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Funktioniert das denn auch? Ich meine das auch mal versucht zu haben, und der String enthielt hinterher nur eine Zahl, hexadezimal formatiert. Ich meine auch camper hätte damals angemerkt, dass das aus einer grundsätzlichen Sache im Aufbau der Standardbibliothek liegt.</p>
</blockquote>
<p>Für die korrekte Ausgabe müssen wir mit einem Trick das rvalue std::ostringstream() in ein lvalue verwandeln, das geht über Memberfunktionen - z.B. irgendein Manipulator, der im Endeffekt nichts tut:</p>
<pre><code class="language-cpp">#define ThrowError(msg) throw std::exception(static_cast&lt;std::ostringstream&amp;&gt;(std::ostringstream() &lt;&lt; flush &lt;&lt; msg).str().c_str())
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441130</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 Jan 2008 10:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 10:37:24 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du überschreibst doch gar nicht den operator(), sondern den &quot;operator string&quot; (Konvertierungs-Operator) - und der schlägt zu, wenn du den StringBuilder an eine Funktion übergeben willst, die einen std::string erwartet</p>
</blockquote>
<p>Wie genial ist das denn?! <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="😮"
    /> Man lernt nie aus! <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441156</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 22 Jan 2008 10:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 11:08:10 GMT]]></title><description><![CDATA[<p>Hallo camper, Dein Vorschlag erzeugt eine unbehandelte Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441180</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Tue, 22 Jan 2008 11:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 11:52:25 GMT]]></title><description><![CDATA[<p>Dann musst du wohl std::exception fangen, was anderes wird da kaum geworfen <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="😉"
    /></p>
<p>Das Problem an der ganzen Geschichte ist: sowohl der stringstream als auch der std::string kann an bannig vielen Stellen (Konstruktoren, operator&lt;&lt; usw.) selbst eine exception werfen. Dann fliegt einem irgendwo, wo man eigentlich nur ne selbsgebaute exception erwartet, irgendein std::bad_alloc oder aehnliches um die Ohren, und statt den selbst erkannten Fehler hinreichend zu bearbeiten, fliegt alles auseinander, weil man beim Programmieren etwas fancy sein wollte <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="😉"
    /></p>
<p>Denn so interessant die Problemstellung aus theoretischer Sicht auch sein mag, die Frage ist doch: wie oft kommts im eigenen Code vor, dass man wirklich eine exception werfen muss? Wenns haeufig auftaucht, sollte man sich Gedanken machen, ob das Design nicht verbessert werden kann (Fehlerquellen lieber zur Compilezeit ausschliessen als zur Laufzeit wild mit Exceptions um sich werfen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441223</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 22 Jan 2008 11:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es in C++ einen Stringstream den man wie ein string benutzen kann? on Tue, 22 Jan 2008 14:43:37 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Denn so interessant die Problemstellung aus theoretischer Sicht auch sein mag, die Frage ist doch: wie oft kommts im eigenen Code vor, dass man wirklich eine exception werfen muss? Wenns haeufig auftaucht, sollte man sich Gedanken machen, ob das Design nicht verbessert werden kann (Fehlerquellen lieber zur Compilezeit ausschliessen als zur Laufzeit wild mit Exceptions um sich werfen).</p>
</blockquote>
<p>Ja, es ist eine etwas zu theoretischer Sicht, in der Hoffnung ein bisschen besser C++ zu verstehen. Aber es geht nicht darum Fehler zur Laufzeit abzufangen, die man schon zur Compilezeit hätte vermeiden können. Meine DLL spricht physische Geräte an. Da ist jeder Treiberaufruf unsicher und muss absolut sicher abgefangen werden, damit die Software ohne Neustart weiterarbeiten kann, sobald das Geräteproblem behoben wurde.</p>
<p>Ich habe eine funktionierende Lösung und bin zufrieden. Mir war es darüber hinaus auch wichtig nicht nur um Hilfe zu schreien und sich dann mit der Lösung heimlich davonzuschleichen. Deshalb bemühe ich mich auch dargebotene Lösungsansätze zu verfolgen und die Ergebnisse hier zu dokumentieren. Es besteht immerhin eine geringe Chance anderen damit helfen zu können.</p>
<p>Nochmals ein herzliches Dankeschön an alle...<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441265</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Tue, 22 Jan 2008 14:43:37 GMT</pubDate></item></channel></rss>