<?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[inline Functions zur Kapselung]]></title><description><![CDATA[<p><strong>Hallo</strong></p>
<p>Ich verwende viele kleine const-Arrays und habe diese in kleine inline Functions gekapselt, damit ich im Debug-Mode ganz einfach die Bounds überprüfen kann (--&gt; <code>assert()</code> ).</p>
<p>Mir ist das eingefallen, aber ich bin mir nicht sicher, ob diese einfache Technik ok ist. Funktionieren tut es ja, aber macht ein <em>Programmierer</em> das auch so?<br />
Achja, ich habe nicht so viele Optionen, da es viele solcher inline-Funktionen sind, auf die massiv von mehreren Threads zugegriffen wird und die Funktionen einen erheblichen Teil der gesamten Rechenzeit konsumieren. Ich schätze mal immer noch besser als direkt auf das const-Array zuzugreifen, da ich somit die Möglichkeit habe zentral Debug-Code einzubauen. Und ein <code>switch-case</code> Konstrukt wäre für diese Zwecke vollkommen daneben, schätze ich mal.</p>
<pre><code class="language-cpp">// header file

inline char piece_to_char(const int color, const int piece) {
  static const char ptc[COLORS][PIECES] = {
    {'P', 'N', 'B', 'R', 'Q', 'K'}, 
    {'p', 'n', 'b', 'r', 'q', 'k'}
  };
  assert(color &gt;= COLOR_WHITE &amp;&amp; color &lt;= COLOR_BLACK);
  assert(piece &gt;= PIECE_PAWN &amp;&amp; piece &lt;= PIECE_KING);
  return ptc[color][piece];
}

inline int piece_value(const int piece) {
  static const int pv[PIECES + 1] = {
    VALUE_PAWN,
    VALUE_KNIGHT,
    VALUE_BISHOP,
    VALUE_ROOK,
    VALUE_QUEEN,
    VALUE_KING,
    VALUE_NONE,
  };
  assert(piece &gt;= PIECE_PAWN &amp;&amp; piece &lt;= PIECE_NONE);
  return pv[piece];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/255134/inline-functions-zur-kapselung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 05:07:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255134.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Nov 2009 07:32:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to inline Functions zur Kapselung on Thu, 26 Nov 2009 07:38:06 GMT]]></title><description><![CDATA[<p><strong>Hallo</strong></p>
<p>Ich verwende viele kleine const-Arrays und habe diese in kleine inline Functions gekapselt, damit ich im Debug-Mode ganz einfach die Bounds überprüfen kann (--&gt; <code>assert()</code> ).</p>
<p>Mir ist das eingefallen, aber ich bin mir nicht sicher, ob diese einfache Technik ok ist. Funktionieren tut es ja, aber macht ein <em>Programmierer</em> das auch so?<br />
Achja, ich habe nicht so viele Optionen, da es viele solcher inline-Funktionen sind, auf die massiv von mehreren Threads zugegriffen wird und die Funktionen einen erheblichen Teil der gesamten Rechenzeit konsumieren. Ich schätze mal immer noch besser als direkt auf das const-Array zuzugreifen, da ich somit die Möglichkeit habe zentral Debug-Code einzubauen. Und ein <code>switch-case</code> Konstrukt wäre für diese Zwecke vollkommen daneben, schätze ich mal.</p>
<pre><code class="language-cpp">// header file

inline char piece_to_char(const int color, const int piece) {
  static const char ptc[COLORS][PIECES] = {
    {'P', 'N', 'B', 'R', 'Q', 'K'}, 
    {'p', 'n', 'b', 'r', 'q', 'k'}
  };
  assert(color &gt;= COLOR_WHITE &amp;&amp; color &lt;= COLOR_BLACK);
  assert(piece &gt;= PIECE_PAWN &amp;&amp; piece &lt;= PIECE_KING);
  return ptc[color][piece];
}

inline int piece_value(const int piece) {
  static const int pv[PIECES + 1] = {
    VALUE_PAWN,
    VALUE_KNIGHT,
    VALUE_BISHOP,
    VALUE_ROOK,
    VALUE_QUEEN,
    VALUE_KING,
    VALUE_NONE,
  };
  assert(piece &gt;= PIECE_PAWN &amp;&amp; piece &lt;= PIECE_NONE);
  return pv[piece];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1813664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813664</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 26 Nov 2009 07:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to inline Functions zur Kapselung on Thu, 26 Nov 2009 07:56:20 GMT]]></title><description><![CDATA[<p>Ich finde das völlig OK so - wenn ich deine Voraussetzungen akzeptiere. Eine Kleinigkeit würde ich ändern, nämlich die Parameter nicht als const int, sondern einfach nur als int deklarieren.</p>
<p>Stimmen aber die Voraussetzungen? Ist insbesondere das Mapping der Parameter auf die Rückgabe-/Array-Werte notwendig? Vor allem die Funktion piece_value() erscheint mir überflüssig. Kannst du nicht für den Parameter piece einfach sofort den richtigen Wert verwenden?</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813672</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Thu, 26 Nov 2009 07:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to inline Functions zur Kapselung on Thu, 26 Nov 2009 08:02:23 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Vor allem die Funktion piece_value() erscheint mir überflüssig. Kannst du nicht für den Parameter piece einfach sofort den richtigen Wert verwenden?</p>
</blockquote>
<p>Kaum. PIECE_VALUES sind eher spieltaktische Werte. König ist 99 wert, Dame ist 9 wert. Turm ist 4 wert, Bauer ist 1 wert. Zum Beispiel.<br />
und piece ist ein int zwischen VALUE_PAWN und VALUE_NONE (derzeit zwischen 0 und 6), optimal für Indexzugriffe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813674</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Nov 2009 08:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to inline Functions zur Kapselung on Thu, 26 Nov 2009 08:25:52 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Ist insbesondere das Mapping der Parameter auf die Rückgabe-/Array-Werte notwendig? Vor allem die Funktion piece_value() erscheint mir überflüssig. Kannst du nicht für den Parameter piece einfach sofort den richtigen Wert verwenden?</p>
<p>Stefan.</p>
</blockquote>
<p>Ja, das Mapping ist notwendig. Sollten ja auch nur Beispiele sein, wie sie vielfach in meinen Codes verwendet werden.</p>
<p>Danke für die Antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813678</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Thu, 26 Nov 2009 08:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to inline Functions zur Kapselung on Thu, 26 Nov 2009 18:37:19 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Funktionieren tut es ja, aber macht ein <em>Programmierer</em> das auch so?</p>
</blockquote>
<p>Jeder Programmierer macht es ein wenig anders. Ich beispielsweise mag es, wenn ich STL-kompatible Container habe, die im Debug-Modus automatisch Laufzeitchecks durchführen -- deshalb nehme ich dafür <code>std::tr1::array</code> . Dieses Klassentemplate kannst du gleich wie ein BuiltIn-Array verwenden (sogar die Initialisierungsliste), aber es bietet zusätzlichen Komfort wie <code>size()</code> an. Laufzeitoverhead gibts im Release-Modus keinen.</p>
<p>P.S. Hat sich <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1811029.html" rel="nofollow">das hier</a> inzwischen erübrigt, oder wie siehst du es mit den Typen? Ich habe dort noch geantwortet, weiss aber nicht, ob du es gesehen hast. <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/1813944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813944</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 26 Nov 2009 18:37:19 GMT</pubDate></item></channel></rss>