<?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[Überladen von Funktionen?]]></title><description><![CDATA[<p>Ich möchte zwei Funktionen überladen:</p>
<pre><code class="language-cpp">typedef unsigned __int64 bitboard_t;

inline bitboard_t file_bitboard(const int file) {  // 0 &lt;= file &lt;= 7
  return file_bb[file];
}

inline bitboard_t file_bitboard(const int square) {  // 0 &lt;= square &lt;= 63
  return file_bb[square_file(square)];
}
</code></pre>
<p>Beide Funktionen sind zeitkritisch und es kann kein zusätzlicher Code für eine Fallunterscheidung zur Laufzeit eingebaut werden. Ich möchte überladen, ohne einen neuen Datentypen via Enumeration zu definieren. Was habe ich noch für Möglichkeiten - so wie oben kann es natürlich nicht gehen?</p>
<p>Ich schätze mal das geht auch nicht (habs noch nicht ausprobiert, klingt aber unsinnig):</p>
<pre><code class="language-cpp">typedef int file_t;
typedef int square_t;
typedef unsigned __int64 bitboard_t;

inline bitboard_t file_bitboard(const file_t file) {  // 0 &lt;= file &lt;= 7
  return file_bb[file];
}

inline bitboard_t file_bitboard(const square_t square) {  // 0 &lt;= square &lt;= 63
  return file_bb[square_file(square)];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/254101/überladen-von-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 03:38:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254101.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Nov 2009 16:26:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 16:26:04 GMT]]></title><description><![CDATA[<p>Ich möchte zwei Funktionen überladen:</p>
<pre><code class="language-cpp">typedef unsigned __int64 bitboard_t;

inline bitboard_t file_bitboard(const int file) {  // 0 &lt;= file &lt;= 7
  return file_bb[file];
}

inline bitboard_t file_bitboard(const int square) {  // 0 &lt;= square &lt;= 63
  return file_bb[square_file(square)];
}
</code></pre>
<p>Beide Funktionen sind zeitkritisch und es kann kein zusätzlicher Code für eine Fallunterscheidung zur Laufzeit eingebaut werden. Ich möchte überladen, ohne einen neuen Datentypen via Enumeration zu definieren. Was habe ich noch für Möglichkeiten - so wie oben kann es natürlich nicht gehen?</p>
<p>Ich schätze mal das geht auch nicht (habs noch nicht ausprobiert, klingt aber unsinnig):</p>
<pre><code class="language-cpp">typedef int file_t;
typedef int square_t;
typedef unsigned __int64 bitboard_t;

inline bitboard_t file_bitboard(const file_t file) {  // 0 &lt;= file &lt;= 7
  return file_bb[file];
}

inline bitboard_t file_bitboard(const square_t square) {  // 0 &lt;= square &lt;= 63
  return file_bb[square_file(square)];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1806602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806602</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 11 Nov 2009 16:26:04 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 16:31:12 GMT]]></title><description><![CDATA[<p>Du musst eine Wrapperklasse, keinen typedef, für int machen, um die beiden Funktionen unterscheiden zu können.</p>
<p>Ich habe aber den Eindruck, dass du Überladung hier falsch einsetzen willst. Kannst du etwas mehr Kontext zu deinem Problem geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806605</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 11 Nov 2009 16:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 16:38:41 GMT]]></title><description><![CDATA[<p><strong>Kontext:</strong></p>
<p>Ich baue eine Schachengine und benötige eine 64-Bit Bitmaske für die Linien A-H auf dem Schachbrett. Die Funktionen sollen deshalb überladen werden, damit ich eine Bitmaske für die entsprechende Linie A-H bekomme, egal ob ich der Funktion ein Feld (0-63) oder eine Linie (0-7) übergebe.</p>
<p>Ich weiss, dass ich hier nicht überladen müsste (logisch aber unsauber). Aber spätestens bei den Reihen muss ich das tun.</p>
<p>Jetzt bin ich Anfänger und weiss leider auch nicht genau, was eine Wrapper-Klasse ist? Und die Performance ist auch entscheidend, da laut Profiler diese Funktionen extrem oft aufgerufen werden und relativ viel CPU-Zeit konsumieren.</p>
<p><strong>Danke schonmal</strong> <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/1806610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806610</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 11 Nov 2009 16:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 17:05:56 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; return file_bb[file];</p>
</blockquote>
<p>Ich kann mir nicht vorstellen, dass das CPU-Zeit kosten sollte. Mit Wrapper ist z.B. das gemeint:</p>
<pre><code class="language-cpp">class file {
private:
   int f;

public:
   file(int file) : f(file) { } // Hier gleich Wertebereich usw. einschränken
   int get() { return f; }
};

// ...

inline bitboard_t file_bitboard(const file f) {
  return file_bb[f.get()];
}

// ...

file_bitboard(4);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1806628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806628</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 11 Nov 2009 17:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 17:04:42 GMT]]></title><description><![CDATA[<p>Ok. Wenn das die einzige Möglichkeit ist, dann lasse ich es erstmal wie es ist und verzichte auf die Überladung. Muss dann halt mehr aufpassen.</p>
<p>Achja, und 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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806630</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 11 Nov 2009 17:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von Funktionen? on Wed, 11 Nov 2009 20:22:10 GMT]]></title><description><![CDATA[<p>Also da gibt es durchasus ein paar Möglichkeiten. Die erste Variante einer Wrapper Klasse wurde genannt. Das kannst du ganz einfach so machen:</p>
<pre><code class="language-cpp">struct file_t
{
 int value;
};

struct square_t
{
 int value;
};
</code></pre>
<p>Die beiden Klassen wrappen (umschliessen) den int und Stellen so neue Typen dar. Du musst den Zugriff einfach ein wenig abändern. Das sollte sogar soweit optimiert werden können, dass da gar kein anderer Code generiert wird, als wenn du direkt int's genommen hättest.</p>
<p>Dann eine weitere Möglichkeit wäre ja die Funktionen einfach anders zu benennen.</p>
<p>Dann könntest du auch noch einen dummy Parameter einbauen, der halt einen anderen Typen hat je nach Funtion (da würde ich aber eher zum Umbenennen der Funktion tendieren).</p>
<p>Aber ich bezweifle auch mal, dass dein Programm (im Endstadium) dort wirklich einen Engpass haben wird. Wenn ich an eine Schachengine denke, dann denke ich eher weniger an die paar Zugriffe, die aufs Spielfeld gemacht werden, sondern eher an die Berechnungn, die ablaufen, um den nächsten Zug zu berechenen, wo ich einen enorm viel höheren Optimierungsbedarf sehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1806722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1806722</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 11 Nov 2009 20:22:10 GMT</pubDate></item></channel></rss>