<?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[OOP Design Frage - tracebuffer messages]]></title><description><![CDATA[<p>Hi,<br />
[Ich bin mir nicht sicher, ob das vielleicht im C++ Forum besser aufgehoben wäre, wenn ja einfach verschieben..]</p>
<p>es geht um folgendes: Normalerweise benutzt man ja in C++ ein stream interface für den output (cout &lt;&lt; &quot;foo&quot; &lt;&lt; bar;), mit den offensichtlichen Vorteilen der Erweiterbarkeit und Typsicherheit. Ein Projekt an dem ich arbeite stellt gerade allen output von einem solchen stream I/O interface auf printf um, um tracebuffer und debugging output zu vereinheitlichen. Ein tracebuffer funktioniert hier etwa so, dass eine Funktion zusammen mit einem Kennzeichner (etwa event-id) und einigen Datenwerten aufgerufen wird. Diese Infos werden dann in eine Art log geschrieben. Im debugger kann man das log anzeigen lassen. Problem ist hier die Interpretation der Daten. Entweder der debugger macht das (also in abhängigkeit der event-id die daten so und so interpretieren und anzeigen), oder, was zur zeit gemacht wird, es wird ein zusätzlicher Format string übergeben, der dann in printf-manier ausgegeben wird. Vom code her etwa:</p>
<pre><code class="language-cpp">void trace( event_id_t ev, int arg, const char* format ) // nur ein argument hier aus gründen der einfachheit
{
  if( want_traced( ev ) )
    log.append( ev, arg, format );
}

// im debugger
if( show_ev( log_it-&gt;ev ) )
  printf( log_it-&gt;format, log_it-&gt;arg );
</code></pre>
<p>Aus Speicherplatzgründen und weil die Argumente mit unter auch direkt interpretiert werden sollen kann nicht einfach die ganze ausgabe geloggt werden.</p>
<p>Wie könnte man das in ein vernünftig erweiterbares, typsicheres C++ interface fassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202495/oop-design-frage-tracebuffer-messages</link><generator>RSS for Node</generator><lastBuildDate>Sun, 28 Jun 2026 21:39:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202495.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Jan 2008 08:23:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OOP Design Frage - tracebuffer messages on Sat, 12 Jan 2008 08:23:14 GMT]]></title><description><![CDATA[<p>Hi,<br />
[Ich bin mir nicht sicher, ob das vielleicht im C++ Forum besser aufgehoben wäre, wenn ja einfach verschieben..]</p>
<p>es geht um folgendes: Normalerweise benutzt man ja in C++ ein stream interface für den output (cout &lt;&lt; &quot;foo&quot; &lt;&lt; bar;), mit den offensichtlichen Vorteilen der Erweiterbarkeit und Typsicherheit. Ein Projekt an dem ich arbeite stellt gerade allen output von einem solchen stream I/O interface auf printf um, um tracebuffer und debugging output zu vereinheitlichen. Ein tracebuffer funktioniert hier etwa so, dass eine Funktion zusammen mit einem Kennzeichner (etwa event-id) und einigen Datenwerten aufgerufen wird. Diese Infos werden dann in eine Art log geschrieben. Im debugger kann man das log anzeigen lassen. Problem ist hier die Interpretation der Daten. Entweder der debugger macht das (also in abhängigkeit der event-id die daten so und so interpretieren und anzeigen), oder, was zur zeit gemacht wird, es wird ein zusätzlicher Format string übergeben, der dann in printf-manier ausgegeben wird. Vom code her etwa:</p>
<pre><code class="language-cpp">void trace( event_id_t ev, int arg, const char* format ) // nur ein argument hier aus gründen der einfachheit
{
  if( want_traced( ev ) )
    log.append( ev, arg, format );
}

// im debugger
if( show_ev( log_it-&gt;ev ) )
  printf( log_it-&gt;format, log_it-&gt;arg );
</code></pre>
<p>Aus Speicherplatzgründen und weil die Argumente mit unter auch direkt interpretiert werden sollen kann nicht einfach die ganze ausgabe geloggt werden.</p>
<p>Wie könnte man das in ein vernünftig erweiterbares, typsicheres C++ interface fassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435239</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Sat, 12 Jan 2008 08:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to OOP Design Frage - tracebuffer messages on Sat, 12 Jan 2008 12:11:59 GMT]]></title><description><![CDATA[<p>Schau dir vielleicht mal boost::format an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435340</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 12 Jan 2008 12:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to OOP Design Frage - tracebuffer messages on Sat, 12 Jan 2008 19:06:08 GMT]]></title><description><![CDATA[<p>Ich kenne boost.format, aber das löst mein Problem nicht wirklich, weil die ausgabe darauf beruht, dass der Typ zur compilierzeit an der Stelle im code bekannt ist, was bei einem gemischten log nicht ohne weiteres gegeben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435582</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Sat, 12 Jan 2008 19:06:08 GMT</pubDate></item><item><title><![CDATA[Reply to OOP Design Frage - tracebuffer messages on Sat, 12 Jan 2008 21:48:27 GMT]]></title><description><![CDATA[<p>ness schrieb:</p>
<blockquote>
<p>Wie könnte man das in ein vernünftig erweiterbares, typsicheres C++ interface fassen?</p>
</blockquote>
<p>Typsicher und printf schließen sich gegenseitig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435658</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Sat, 12 Jan 2008 21:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to OOP Design Frage - tracebuffer messages on Sat, 12 Jan 2008 21:57:10 GMT]]></title><description><![CDATA[<p>in C++ könnte man RTTI benutzen, ansonsten wirds wohl schwierig mit der übergabe des typs.<br />
<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/1435662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435662</guid><dc:creator><![CDATA[get the calling type]]></dc:creator><pubDate>Sat, 12 Jan 2008 21:57:10 GMT</pubDate></item></channel></rss>