<?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[ostream mit mehreren targets]]></title><description><![CDATA[<p>Hallo, ich will einen Logger schreiben, der genau wie die Standardstreams cout, clog, cerr funktioniert. Der Logger soll konfigurierbar sein, so dass beispielsweise in verschiedene Dateien geschrieben werden kann oder nach stdout, stderr, stdlog, eventuell soll auch in die syslogs geschrieben werden. Also ähnlich wie</p>
<pre><code class="language-cpp">class logger : public basic_ostream&lt;char&gt;
{
list&lt;ostream*&gt; streams;
};
</code></pre>
<p>Allerdings weiss ich nicht wie man die den basic_ostream mit den anderen Stream verknüft. Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229538/ostream-mit-mehreren-targets</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 18:41:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229538.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Dec 2008 09:58:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ostream mit mehreren targets on Sat, 13 Dec 2008 09:59:24 GMT]]></title><description><![CDATA[<p>Hallo, ich will einen Logger schreiben, der genau wie die Standardstreams cout, clog, cerr funktioniert. Der Logger soll konfigurierbar sein, so dass beispielsweise in verschiedene Dateien geschrieben werden kann oder nach stdout, stderr, stdlog, eventuell soll auch in die syslogs geschrieben werden. Also ähnlich wie</p>
<pre><code class="language-cpp">class logger : public basic_ostream&lt;char&gt;
{
list&lt;ostream*&gt; streams;
};
</code></pre>
<p>Allerdings weiss ich nicht wie man die den basic_ostream mit den anderen Stream verknüft. Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1629836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1629836</guid><dc:creator><![CDATA[headmyshoulder]]></dc:creator><pubDate>Sat, 13 Dec 2008 09:59:24 GMT</pubDate></item><item><title><![CDATA[Reply to ostream mit mehreren targets on Sat, 13 Dec 2008 11:09:58 GMT]]></title><description><![CDATA[<p>Vll hilft dir das ja weiter:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-116667-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-streambuf-and-start-is-17.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-116667-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-streambuf-and-start-is-17.html</a></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1629863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1629863</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 13 Dec 2008 11:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to ostream mit mehreren targets on Sat, 13 Dec 2008 18:03:10 GMT]]></title><description><![CDATA[<p>headmyshoulder schrieb:</p>
<blockquote>
<p>Allerdings weiss ich nicht wie man die den basic_ostream mit den anderen Stream verknüft. Hat jemand eine Idee?</p>
</blockquote>
<p>Wenn deine Klasse nur ein Logger sein muss und selber gar nicht Streamfunktionalität hat - also je nach Anwendung auf andere Streams zurückgreift - brauchst du ihn auch nicht von <code>std::basic_ostream</code> abzuleiten.</p>
<p>Praktisch ist es, wenn du die Macht der Polymorphie nutzt, indem du einen Basisklassenzeiger auf <code>std::ostream</code> hast. Dann kannst du je nach Anwendung auf einen anderen Stream, der von <code>ostream</code> erbt, zeigen.</p>
<pre><code class="language-cpp">class Streamer
{
	public:
		Streamer();
		Streamer(std::ostream* NewStream);
		~Streamer();

		template &lt;typename T&gt;
		std::ostream&amp; operator&lt;&lt; (const T&amp; Object);

		void SetStream(std::ostream* NewStream);
		void operator= (std::ostream* NewStream);

	private:
		std::ostream* MyStream;
};
</code></pre>
<p>Du solltest dir vielleicht auch überlegen, ob die Klasse das Stream-Objekt besitzt, also auch für dessen Löschung zuständig ist, oder ob nur bereits existente Streams übergeben werden. Je nachdem kannst du auch statt Zeigern Referenzen übergeben.</p>
<p>Anwenden kannst du Instanzen von <code>Streamer</code> ganz normal benutzen, wenn du den <code>operator&lt;&lt;</code> sinngemäss überlädst.</p>
<pre><code class="language-cpp">int main()
{
    Streamer s;
    s &lt;&lt; &quot;ein Text mit der Nummer &quot; &lt;&lt; 43 &lt;&lt; &quot; war das.&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Wenn mehrere Streams gleichzeitig verwaltet werden sollen, speicherst du deren Zeiger in einer <code>std::list</code> und iterierst diese beim Zugriff auf die Streams durch (beispielsweise beim Aufruf des &lt;&lt;-Operators).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630069</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 13 Dec 2008 18:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to ostream mit mehreren targets on Sat, 13 Dec 2008 18:48:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn mehrere Streams gleichzeitig verwaltet werden sollen, speicherst du deren Zeiger in einer <code>std::list</code> und iterierst diese beim Zugriff auf die Streams durch (beispielsweise beim Aufruf des &lt;&lt;-Operators).</p>
</blockquote>
<p>Falls mich nicht alles täuscht, wird er entweder auf die STL-Container verzichten müssen oder auf die Referenzen (und damit nicht um Pointer drum rumkommen ^^)...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630083</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 13 Dec 2008 18:48:23 GMT</pubDate></item><item><title><![CDATA[Reply to ostream mit mehreren targets on Sat, 13 Dec 2008 19:18:53 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Falls mich nicht alles täuscht, wird er entweder auf die STL-Container verzichten müssen oder auf die Referenzen (und damit nicht um Pointer drum rumkommen ^^)...</p>
</blockquote>
<p>Und was ist so schlimm daran, Zeiger zu verwenden? Wenn es einen stört, kann man ja die Schnittstelle immer noch mit Referenzen einrichten, sodass man Objekte direkt übergeben kann, anstatt <code>operator&amp;</code> zu schreiben.</p>
<p>Aber das ist dann sowieso wieder davon abhängig, ob die Klasse besitzergreifendes Verhalten hat oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630100</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 13 Dec 2008 19:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to ostream mit mehreren targets on Sun, 14 Dec 2008 10:14:48 GMT]]></title><description><![CDATA[<p>Ok, Danke erstmal für Eure Antworten.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>Vll hilft dir das ja weiter:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-</a> ....... sc-and-highlight-is-streambuf-and-start-is-17.html</p>
</blockquote>
<p>Das sieht ganz interessant aus und könnte eventuell schon mein Problem lösen.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Praktisch ist es, wenn du die Macht der Polymorphie nutzt, indem du einen Basisklassenzeiger auf <code>std::ostream</code> hast. Dann kannst du je nach Anwendung auf einen anderen Stream, der von <code>ostream</code> erbt, zeigen.</p>
<pre><code class="language-cpp">class Streamer
{
	public:
		Streamer();
		Streamer(std::ostream* NewStream);
		~Streamer();
		
		template &lt;typename T&gt;
		std::ostream&amp; operator&lt;&lt; (const T&amp; Object);
		
		void SetStream(std::ostream* NewStream);
		void operator= (std::ostream* NewStream);
		
	private:
		std::ostream* MyStream;
};
</code></pre>
</blockquote>
<p>Das wird für eine Liste von Streams problematisch, weil &quot;operator&lt;&lt;&quot; in dem Fall nicht *this zurückgeben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630243</guid><dc:creator><![CDATA[headmyshoulder]]></dc:creator><pubDate>Sun, 14 Dec 2008 10:14:48 GMT</pubDate></item></channel></rss>