<?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[printf Parameter übergeben]]></title><description><![CDATA[<p>Huhu! <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>
<p>Hmm...ich sitze gerade daran mir eine Logfile Klasse zu schreiben.</p>
<p>Bisher kann ich so einen Logeintrag vornehmen:</p>
<pre><code class="language-cpp">int myInt = 42;
mLog-&gt;log(&quot;Mein Integerwert: &quot; + myStringTools::to_string(myInt));
</code></pre>
<p>Die Methode der Logklasse sieht dabei so aus:</p>
<pre><code class="language-cpp">void log_creator::log(string &amp;ctext)
{
//schreibe ctext String in Log Datei
...
}
</code></pre>
<p>So weit.. so umständlich.</p>
<p>Viel praktischer wäre es natürlich wenn ich im printf Stil meine Logs so schreiben könnte:</p>
<pre><code class="language-cpp">int myInt = 42;
mLog-&gt;log(&quot;Mein Integerwert: %d&quot;, myInt);
</code></pre>
<p>Aber wie übergebe ich diesen Parametermischmasch an meine ::log() Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224257/printf-parameter-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 16:45:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224257.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Oct 2008 15:32:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to printf Parameter übergeben on Tue, 07 Oct 2008 15:40:26 GMT]]></title><description><![CDATA[<p>Huhu! <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>
<p>Hmm...ich sitze gerade daran mir eine Logfile Klasse zu schreiben.</p>
<p>Bisher kann ich so einen Logeintrag vornehmen:</p>
<pre><code class="language-cpp">int myInt = 42;
mLog-&gt;log(&quot;Mein Integerwert: &quot; + myStringTools::to_string(myInt));
</code></pre>
<p>Die Methode der Logklasse sieht dabei so aus:</p>
<pre><code class="language-cpp">void log_creator::log(string &amp;ctext)
{
//schreibe ctext String in Log Datei
...
}
</code></pre>
<p>So weit.. so umständlich.</p>
<p>Viel praktischer wäre es natürlich wenn ich im printf Stil meine Logs so schreiben könnte:</p>
<pre><code class="language-cpp">int myInt = 42;
mLog-&gt;log(&quot;Mein Integerwert: %d&quot;, myInt);
</code></pre>
<p>Aber wie übergebe ich diesen Parametermischmasch an meine ::log() Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594921</guid><dc:creator><![CDATA[Samhayne]]></dc:creator><pubDate>Tue, 07 Oct 2008 15:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to printf Parameter übergeben on Tue, 07 Oct 2008 15:36:38 GMT]]></title><description><![CDATA[<p>edit: oops</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594924</guid><dc:creator><![CDATA[Samhayne]]></dc:creator><pubDate>Tue, 07 Oct 2008 15:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to printf Parameter übergeben on Tue, 07 Oct 2008 15:47:34 GMT]]></title><description><![CDATA[<p>Von der Version, wie es printf macht, würde ich abraten, erst recht in C++. Es stehen dir allerdings verschiedene andere Möglichkeiten offen. Vor allem über operatoren und templates lässt sich sowas gut lösen.<br />
Du könntest dir mal <code>boost::format</code> anschauen oder wögmlich sogar gleich verwenden:<br />
<a href="http://www.boost.org/doc/libs/1_36_0/libs/format/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_36_0/libs/format/index.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594931</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 07 Oct 2008 15:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to printf Parameter übergeben on Tue, 07 Oct 2008 17:58:02 GMT]]></title><description><![CDATA[<p>Hey, Dravere.</p>
<p>Danke für den Tipp soweit.</p>
<p>Hab mal bissl damit rumgebastelt...</p>
<p>... log() überladen:</p>
<pre><code class="language-cpp">void log_creator::log(const boost::format&amp; f)
{
	log(boost::str(f));
}
</code></pre>
<p>und nu kann ich schon mal so loggen:</p>
<pre><code class="language-cpp">mLog-&gt;log(boost::format(&quot;test1: %d lala2: %d yago: %d&quot;) % 21 % 32 % 43);
//Output: test1: 21 lala2: 32 yago: 43
</code></pre>
<p>Nur das boost::format() is noch'n Schönheitsfehler.</p>
<p><a href="http://www.gamedev.net/community/forums/viewreply.asp?ID=3128489" rel="nofollow">Hier</a> hat wohl einer schon 'n Template für gebastelt... aber... ich hab weder Ahnung, was da passiert... noch kompiliert das.</p>
<p>Grml.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595026</guid><dc:creator><![CDATA[Samhayne]]></dc:creator><pubDate>Tue, 07 Oct 2008 17:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to printf Parameter übergeben on Tue, 07 Oct 2008 18:28:57 GMT]]></title><description><![CDATA[<p>Naja, wie gesagt, du könntest es ähnlich, wie boost::format selber lösen. Ich habe da zum Beispiel jetzt auch stark an die C++ Streams gedacht und mal ein kurzes Beispiel zusammengebaut, um dir einen Denkanstoss zu geben <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>
<pre><code class="language-cpp">#include &lt;list&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

//////////////////////////////////////////////////////////////////////////
// Log

class Log
{
	// Enums //
public:
	enum Action { SAVE };

	// Attributes //
private:
	std::list&lt;std::string&gt; m_logMessages;

	std::string m_nextMessage;

	// Constructors &amp; Destructor //
public:
	Log() { };
	~Log() { };

	// Methods //
public:
	void append_next_message(std::string const&amp; text)
	{
		m_nextMessage += text;
	}

	void save_next_message()
	{
		m_logMessages.push_back(m_nextMessage);
		m_nextMessage.clear();
	}
};

template&lt;typename ValueT&gt;
Log&amp; operator &lt;&lt;(Log&amp; log, ValueT const&amp; value)
{
	std::stringstream ss;
	ss &lt;&lt; value;

	log.append_next_message(ss.str());

	return log;
}

Log&amp; operator &lt;&lt;(Log&amp; log, Log::Action action)
{
	if(action == Log::SAVE)
	{ log.save_next_message(); }

	return log;
}

int main()
{
	Log log;

	log &lt;&lt; &quot;Hello, this is warning number &quot; &lt;&lt; 50 &lt;&lt; '!' &lt;&lt; Log::SAVE;
	log &lt;&lt; &quot;Hello, this is warning number &quot; &lt;&lt; 51 &lt;&lt; '!' &lt;&lt; Log::SAVE;

	std::cin.get();

	return 0;
}
</code></pre>
<p>Kann man sicher noch verbessern, wie gesagt, ist nur kurz innert ein paar Minuten zusammengeschrieben worden.<br />
Vielleicht könntest du sogar die normalen Streams verwenden und einen eigene Klasse, welche von einem Streambuf erbt, implementieren.<br />
Dazu dann eigene Manipulatoren. Wir haben zu dem Thema einen schönen Artikel im Magazin:<br />
<a href="http://magazin.c-plusplus.net/artikel/Benutzerdefinierte%20Manipulatoren" rel="nofollow">http://magazin.c-plusplus.net/artikel/Benutzerdefinierte Manipulatoren</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1595047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1595047</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 07 Oct 2008 18:28:57 GMT</pubDate></item><item><title><![CDATA[Reply to printf Parameter übergeben on Thu, 09 Oct 2008 14:24:03 GMT]]></title><description><![CDATA[<p>Holla! Das ist natürlich eine sehr viel feinere Lösung. <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>Dank Dir für die Mühe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596337</guid><dc:creator><![CDATA[Samhayne]]></dc:creator><pubDate>Thu, 09 Oct 2008 14:24:03 GMT</pubDate></item></channel></rss>