<?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[Strings aus beliebigen Datentypen zusamensetzen]]></title><description><![CDATA[<p>Hi,</p>
<p>da ich aus der Java-Richtung komme, vermisse ich in C++ die intuitive Möglichkeit, Strings aus beliebigen Datentypen zusammenzusetzen:</p>
<pre><code>throw new MyException(&quot;Fehler: Datei &quot; + filename + &quot; mit der Nummer &quot; + id + &quot; existiert nicht.&quot;);
</code></pre>
<p>In C++ habe ich mir bis jetzt so beholfen:</p>
<pre><code>std::stringstream out;
out &lt;&lt; &quot;Fehler: Datei &quot; &lt;&lt; filename &lt;&lt; &quot; mit der Nummer &quot; &lt;&lt; id &lt;&lt; &quot; existiert nicht.&quot;;
throw std::runtime_error(out.str());
</code></pre>
<p>Hat jemand eine geniale Idee, wie man diesen Dreizeiler möglichst elegant auf eine Zeile reduzieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279305/strings-aus-beliebigen-datentypen-zusamensetzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 12:17:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279305.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Dec 2010 10:57:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 10:57:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>da ich aus der Java-Richtung komme, vermisse ich in C++ die intuitive Möglichkeit, Strings aus beliebigen Datentypen zusammenzusetzen:</p>
<pre><code>throw new MyException(&quot;Fehler: Datei &quot; + filename + &quot; mit der Nummer &quot; + id + &quot; existiert nicht.&quot;);
</code></pre>
<p>In C++ habe ich mir bis jetzt so beholfen:</p>
<pre><code>std::stringstream out;
out &lt;&lt; &quot;Fehler: Datei &quot; &lt;&lt; filename &lt;&lt; &quot; mit der Nummer &quot; &lt;&lt; id &lt;&lt; &quot; existiert nicht.&quot;;
throw std::runtime_error(out.str());
</code></pre>
<p>Hat jemand eine geniale Idee, wie man diesen Dreizeiler möglichst elegant auf eine Zeile reduzieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998225</guid><dc:creator><![CDATA[Sebastian Meier]]></dc:creator><pubDate>Thu, 23 Dec 2010 10:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 11:22:08 GMT]]></title><description><![CDATA[<p>Die std::stringstream Variante ist schon mal nicht schlecht.<br />
Alternativ gibts es auch Formatting Libraries, z.B. boost::format.</p>
<p>Edit:<br />
Das sieht dann z.B. so aus:</p>
<pre><code class="language-cpp">std::string s = boost::str(boost::format(&quot;Dies ist Nummer %1% und kann verwendet werden wie %2%&quot;) % 23 % &quot;HalloVelo&quot;);
</code></pre>
<p>BTW: Exceptions werden in C++ als Wert geworfen und als Referenz / const- Referenz gefangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998235</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 23 Dec 2010 11:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 14:04:13 GMT]]></title><description><![CDATA[<p>das boost:: vor str() ist überflüssig, str() wird per ADL gefunden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998292</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 23 Dec 2010 14:04:13 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 15:09:20 GMT]]></title><description><![CDATA[<p>Sebastian Meier schrieb:</p>
<blockquote>
<pre><code>throw new MyException(&quot;Fehler: Datei &quot; + filename + &quot; mit der Nummer &quot; + id + &quot; existiert nicht.&quot;);
</code></pre>
</blockquote>
<p>Wenn filename ein std::string oder const char* und id eine Ganzzahl ist, geht auch</p>
<pre><code class="language-cpp">string(&quot;Fehler: Datei &quot;) + filename + &quot; mit der Nummer &quot; + lexical_cast&lt;string&gt;(id) + &quot; existiert nicht.&quot;
</code></pre>
<p>Wichtig ist, dass der erste Teil ein std::string ist, damit die richtigen Operatoren verwendet werden. lexical_cast ist ebenfalls Teil von boost, hat man aber auch in drei Zeilen selbst mit std::stringstream geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998329</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 23 Dec 2010 15:09:20 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 16:35:28 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>..<br />
Wichtig ist, dass der erste Teil ein std::string ist, damit die richtigen Operatoren verwendet werden. lexical_cast ist ebenfalls Teil von boost, hat man aber auch in drei Zeilen selbst mit std::stringstream geschrieben.</p>
</blockquote>
<p>Es ist nicht nötig, dass der erste Teil ein std::string ist, solange einer der Operanden ein string ist.</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">int id = 4;
std::string msg = &quot;Hallo &quot; + std::string(&quot;Welt&quot;) + &quot;! &quot; + &quot;c++&quot; + boost::lexical_cast&lt;std::string&gt;(id) + &quot;ever&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1998365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998365</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Thu, 23 Dec 2010 16:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 19:29:02 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>..<br />
Wichtig ist, dass der erste Teil ein std::string ist, damit die richtigen Operatoren verwendet werden. lexical_cast ist ebenfalls Teil von boost, hat man aber auch in drei Zeilen selbst mit std::stringstream geschrieben.</p>
</blockquote>
<p>Es ist nicht nötig, dass der erste Teil ein std::string ist, solange einer der Operanden ein string ist.</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">int id = 4;
std::string msg = &quot;Hallo &quot; + std::string(&quot;Welt&quot;) + &quot;! &quot; + &quot;c++&quot; + boost::lexical_cast&lt;std::string&gt;(id) + &quot;ever&quot;;
</code></pre>
</blockquote>
<p>Nein, das stimmt auch nicht, mindestens einer der ersten beiden muss ein std::string sein, dann greift einer der Operatoren:</p>
<pre><code class="language-cpp">string operator+ (const string&amp; lhs, const string&amp; rhs);
string operator+ (const char* lhs, const string&amp; rhs);
string operator+ (char lhs, const string&amp; rhs);
string operator+ (const string&amp; lhs, const char* rhs);
string operator+ (const string&amp; lhs, char rhs);
</code></pre>
<pre><code class="language-cpp">string x = &quot;Hello&quot; + &quot; &quot; + string( &quot;Welt&quot; );
</code></pre>
<p>geht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998439</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 23 Dec 2010 19:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 23 Dec 2010 19:38:46 GMT]]></title><description><![CDATA[<p>Ja - da hab ich mich wohl nicht klar genug ausgedrückt. Wollte aber genau das aussagen im Prinzip.</p>
<p>Mit &quot;einer der Operanden&quot; meinte ich jeweils einen der beiden Operanden des operators+.</p>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1998444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998444</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Thu, 23 Dec 2010 19:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Fri, 24 Dec 2010 08:19:34 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">string x = &quot;Hello&quot; + &quot; &quot; + string( &quot;Welt&quot; );
</code></pre>
<p>geht nicht.</p>
</blockquote>
<p>Wenn du jetzt wieder das + zwischen &quot;Hallo&quot; und &quot; &quot; wegnimmst, sollte es übrigens wieder gehen <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/1998525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998525</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Dec 2010 08:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Fri, 24 Dec 2010 08:26:37 GMT]]></title><description><![CDATA[<p>Hier stinkts nach Klugscheiß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998527</guid><dc:creator><![CDATA[Booooooooooah]]></dc:creator><pubDate>Fri, 24 Dec 2010 08:26:37 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Fri, 24 Dec 2010 09:30:21 GMT]]></title><description><![CDATA[<p>Booooooooooah schrieb:</p>
<blockquote>
<p>Hier stinkts nach Klugscheiß.</p>
</blockquote>
<p>Klugschiss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998539</guid><dc:creator><![CDATA[klugscheissa]]></dc:creator><pubDate>Fri, 24 Dec 2010 09:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Fri, 24 Dec 2010 13:28:27 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>Es ist nicht nötig, dass der erste Teil ein std::string ist, solange einer der Operanden ein string ist.</p>
</blockquote>
<p>Ach herrje, falsche Sprache. Sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998606</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 24 Dec 2010 13:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 30 Dec 2010 14:03:08 GMT]]></title><description><![CDATA[<p>Danke, eure Antworten haben mir wirklich weitergeholfen (ernst gemeint).</p>
<p><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/2000346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000346</guid><dc:creator><![CDATA[Sebastian Meier]]></dc:creator><pubDate>Thu, 30 Dec 2010 14:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Thu, 30 Dec 2010 15:34:13 GMT]]></title><description><![CDATA[<p>Sebastian Meier schrieb:</p>
<blockquote>
<p>da ich aus der Java-Richtung komme, vermisse ich in C++ die intuitive Möglichkeit, Strings aus beliebigen Datentypen zusammenzusetzen:</p>
<pre><code>throw new MyException(&quot;Fehler: Datei &quot; + filename + &quot; mit der Nummer &quot; + id + &quot; existiert nicht.&quot;);
</code></pre>
</blockquote>
<p>Aber so etwas vermeidet man auch in Java -- zugunsten von StringBuilder -- da sonst ganz schön langsam.</p>
<p>Wenn filename ein std::string ist, klappen zumindest schonmal die ersten beiden op+.</p>
<p>Sebastian Meier schrieb:</p>
<blockquote>
<p>In C++ habe ich mir bis jetzt so beholfen:</p>
<pre><code>std::stringstream out;
out &lt;&lt; &quot;Fehler: Datei &quot; &lt;&lt; filename &lt;&lt; &quot; mit der Nummer &quot; &lt;&lt; id &lt;&lt; &quot; existiert nicht.&quot;;
throw std::runtime_error(out.str());
</code></pre>
<p>Hat jemand eine geniale Idee, wie man diesen Dreizeiler möglichst elegant auf eine Zeile reduzieren kann?</p>
</blockquote>
<p>Kannst Du Boost.Format benutzen, oder diese stringstream-Sache kapseln:</p>
<pre><code class="language-cpp">// anythung to string
class a2str {
  stringstream ss;
public:
  template&lt;class T&gt;
  a2str&amp; operator&lt;&lt;(T const&amp; x) {
    ss &lt;&lt; x;
    return *this;
  }
  operator string() const {
    return ss.str();
  } 
};

...

throw runtime_error(a2str() &lt;&lt; 23 &lt;&lt; &quot; + &quot; &lt;&lt; 42 &lt;&lt; &quot; = &quot; &lt;&lt; 65);
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000383</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 30 Dec 2010 15:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Strings aus beliebigen Datentypen zusamensetzen on Sat, 01 Jan 2011 11:34:12 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>...diese stringstream-Sache kapseln:...</p>
</blockquote>
<p>Nette Idee!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Muss ich mal mit rumspielen ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000926</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 01 Jan 2011 11:34:12 GMT</pubDate></item></channel></rss>