<?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[std::endl als Parameter in eigener Funktion]]></title><description><![CDATA[<p>Guten Tag alle miteinander! <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="🙂"
    /><br />
Ich hab eine kleine Logbuchklasse geschrieben deren Grundlage std::ofstream ist.<br />
Ich hab als template den Operator &lt;&lt; definiert um alles direkt nach std::ofstream zu schicken.<br />
Hab außerdem noch einen Operator &lt;&lt; überladen um Zeichenketten abzufangen und '\n' durch &quot;&lt;br&gt;\n&quot; zu ersetzen<br />
Jetzt wollte ich noch endl abfangen können um es durch &quot;&lt;br&gt;\n&quot; zu ersetzen, aber ich komme einfach nicht dahinter was das für einen Typ hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich wäre froh wenn jemand von euch einen Rat hätte <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="🙂"
    /><br />
Oder noch besser ein bisschen nützlichen Code <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/211077/std-endl-als-parameter-in-eigener-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:52:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211077.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Apr 2008 13:11:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::endl als Parameter in eigener Funktion on Fri, 18 Apr 2008 13:11:48 GMT]]></title><description><![CDATA[<p>Guten Tag alle miteinander! <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="🙂"
    /><br />
Ich hab eine kleine Logbuchklasse geschrieben deren Grundlage std::ofstream ist.<br />
Ich hab als template den Operator &lt;&lt; definiert um alles direkt nach std::ofstream zu schicken.<br />
Hab außerdem noch einen Operator &lt;&lt; überladen um Zeichenketten abzufangen und '\n' durch &quot;&lt;br&gt;\n&quot; zu ersetzen<br />
Jetzt wollte ich noch endl abfangen können um es durch &quot;&lt;br&gt;\n&quot; zu ersetzen, aber ich komme einfach nicht dahinter was das für einen Typ hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich wäre froh wenn jemand von euch einen Rat hätte <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="🙂"
    /><br />
Oder noch besser ein bisschen nützlichen Code <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1494205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494205</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Fri, 18 Apr 2008 13:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to std::endl als Parameter in eigener Funktion on Fri, 18 Apr 2008 13:37:33 GMT]]></title><description><![CDATA[<p>hi!<br />
das problem ist, dass std::endl nicht einfach etwas ist, das in den ausgabestream geschoben wird, sondern etwas, das bestimmte operationen auf dem ausgabestream durchführt. die deklaration sieht so aus:</p>
<pre><code class="language-cpp">template &lt;class CharT, class Traits&gt;
basic_ostream&lt;CharT, Traits&gt;&amp; endl (basic_ostream&lt;CharT, Traits&gt;&amp; os)
</code></pre>
<p>wenn du für deine klasse nun den passenden operator&lt;&lt; überladen willst, könntest du folgendes probieren:</p>
<pre><code class="language-cpp">struct MyStream
{
   friend MyStream&amp; operator &lt;&lt; (MyStream&amp; ms, ostream&amp; (*some_fun) (ostream&amp;))
   {
     //...
     return ms;
   }
};

MyStream ms;
ms &lt;&lt; endl;
</code></pre>
<p>das problem ist nur, dass endl nicht die einzige funktion mit dieser signatur ist. ends und flush gibt es ja auch noch.<br />
wenn du ganz schlau bist, könntest du auf die idee kommen, innerhalb des operators die adressen der funktionen zu vergleichen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct MyStream
{
   friend MyStream&amp; operator &lt;&lt; (MyStream&amp; ms, ostream&amp; (*some_fun) (ostream&amp;))
   {
      if (some_fun == static_cast&lt;ostream&amp;(*)(ostream&amp;)&gt;(endl))
      {
         //...
      }
      return ms;
   }
};
</code></pre>
<p>das ist allerdings ein bisschen hässlich.</p>
<p>meiner meinung nach hast du zwei optionen:<br />
1. du vergisst dein design und machst deine logbuchklasse kompatibel zu den standardstreams (eventuell einfach nur als streambuf)<br />
2. du entwirfst deine eigene version von endl und konsorten:</p>
<pre><code class="language-cpp">struct MyStream
{
   friend MyStream&amp; operator &lt;&lt; (MyStream&amp; ms, MyStream&amp; (*fun) (MyStream&amp;))
   {
      return fun(ms);
   }
};

MyStream&amp; my_endl (MyStream&amp; ms)
{
   ms &lt;&lt; '\n';
   ms.flush();
   return ms;
}

//...
MyStream ms;
ms &lt;&lt; my_endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494218</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Fri, 18 Apr 2008 13:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::endl als Parameter in eigener Funktion on Fri, 18 Apr 2008 13:49:12 GMT]]></title><description><![CDATA[<p>Danke! <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="🙂"
    /><br />
Sieht jetzt so aus:</p>
<pre><code class="language-cpp">MyLog &amp; MyLog::operator&lt;&lt;(ostream&amp; (*i) (ostream&amp;))
{
	if(i!=endl)
		(*pLogFileStream)&lt;&lt;i;
	else
		(*pLogFileStream)&lt;&lt;&quot;&lt;br&gt;&quot;&lt;&lt;endl;
	return(*this);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494229</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Fri, 18 Apr 2008 13:49:12 GMT</pubDate></item></channel></rss>