<?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[Methoden überladen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas verwirrt. Ich rufe folgende Methode auf:</p>
<pre><code class="language-cpp">Settings-&gt;change_setting(&quot;preloading_lowest_price&quot;, &quot;no&quot;);
</code></pre>
<p>Zur Auswahl stehen:</p>
<pre><code class="language-cpp">void change_setting (string setting_name, string value);
void change_setting (string setting_name, bool value) {cout &lt;&lt; &quot;bool&quot;&lt;&lt;endl;if (value){change_setting(setting_name, &quot;true&quot;);}else{change_setting(setting_name, &quot;false&quot;);}}
</code></pre>
<p>Es sollte die erste Methode aufgerufen werden. Lösche ich die zweite (mit bool aus Parameter), wird die erste aufgerufen und alles ist bestens. Will ich sie hingegen überladen, wird die zweite Methode aufgerufen! Noch merkwürdiger: Dann befindet sich das Programm in einer Endlosschleife, da die ganze Zeit die zweite Methode aufgerufen wird?</p>
<p>Auch ein Debuggen bestätigt, er springt in die &quot;bool&quot;-Methode und ruft sie immer wieder auf.</p>
<p>Könnt ihr da etwas Licht ins Dunkle bringen?</p>
<p>Edit: Anscheinend liegt es am Typ String. Wenn ich (string) &quot;no&quot; übergebe, klappt es. Vielleicht würde es gehen, wenn ich noch eine Methode schreibe, die ein char-Array erwartet. Aber ich will am Ende ja einen String herausbekommen, außerdem klappt es ja auch, wenn ich nur eine string-Methode habe..</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299431/methoden-überladen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 07:57:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299431.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Feb 2012 18:32:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methoden überladen on Fri, 10 Feb 2012 18:40:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas verwirrt. Ich rufe folgende Methode auf:</p>
<pre><code class="language-cpp">Settings-&gt;change_setting(&quot;preloading_lowest_price&quot;, &quot;no&quot;);
</code></pre>
<p>Zur Auswahl stehen:</p>
<pre><code class="language-cpp">void change_setting (string setting_name, string value);
void change_setting (string setting_name, bool value) {cout &lt;&lt; &quot;bool&quot;&lt;&lt;endl;if (value){change_setting(setting_name, &quot;true&quot;);}else{change_setting(setting_name, &quot;false&quot;);}}
</code></pre>
<p>Es sollte die erste Methode aufgerufen werden. Lösche ich die zweite (mit bool aus Parameter), wird die erste aufgerufen und alles ist bestens. Will ich sie hingegen überladen, wird die zweite Methode aufgerufen! Noch merkwürdiger: Dann befindet sich das Programm in einer Endlosschleife, da die ganze Zeit die zweite Methode aufgerufen wird?</p>
<p>Auch ein Debuggen bestätigt, er springt in die &quot;bool&quot;-Methode und ruft sie immer wieder auf.</p>
<p>Könnt ihr da etwas Licht ins Dunkle bringen?</p>
<p>Edit: Anscheinend liegt es am Typ String. Wenn ich (string) &quot;no&quot; übergebe, klappt es. Vielleicht würde es gehen, wenn ich noch eine Methode schreibe, die ein char-Array erwartet. Aber ich will am Ende ja einen String herausbekommen, außerdem klappt es ja auch, wenn ich nur eine string-Methode habe..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179570</guid><dc:creator><![CDATA[Ulf]]></dc:creator><pubDate>Fri, 10 Feb 2012 18:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden überladen on Fri, 10 Feb 2012 18:40:04 GMT]]></title><description><![CDATA[<p>Ulf schrieb:</p>
<blockquote>
<p>Könnt ihr da etwas Licht ins Dunkle bringen?</p>
</blockquote>
<p>Tja, da ist irgendwie die implizite Konvertierung von Zeigern nach bool im Weg.<br />
Du könntest den zweiten Parameter zu const char* machen, dann wird diese Überladung genommen.<br />
(PS: Wenn du etwas nur lesen möchtest, solltest du es via const&amp; übergeben.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179574</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 10 Feb 2012 18:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden überladen on Fri, 10 Feb 2012 18:44:48 GMT]]></title><description><![CDATA[<p>ok, danke. Wenn ich noch eine Methode schreibe, die const char* erwartet und die dann auf die string-Methode direkt (ohne typecast) umleite, klappt es.</p>
<p>Das ist gut zu wissen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179576</guid><dc:creator><![CDATA[Ulf]]></dc:creator><pubDate>Fri, 10 Feb 2012 18:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden überladen on Fri, 10 Feb 2012 20:45:20 GMT]]></title><description><![CDATA[<p>Eigentlich besteht das Problem darin, dass die bool-Überladung zuviel schluckt. Wenn es gelingt, die implizite Konvertierung nach bool in den Griff zu bekommen, ist eine zusätzliche Überladung nicht erforderlich.<br />
Für ein Funktionsargument, dass zur Argumentdeduktion eines Funktionstemplate herangezogen wird, werden die meisten impliziten Konvertierungen unterdrückt. Dass kann man sich per SFINAE zunutze machen.<br />
Ersetze also</p>
<pre><code class="language-cpp">void change_setting (string setting_name, bool value)
</code></pre>
<p>durch</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;
typename std::enable_if&lt;std::is_same&lt;T, bool&gt;::value&gt;::type change_setting (string setting_name, T value)
{
    out &lt;&lt; &quot;bool&quot; &lt;&lt; endl;
    change_setting(setting_name, value ? &quot;true&quot; : &quot;false&quot; );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2179619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179619</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 10 Feb 2012 20:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden überladen on Sat, 11 Feb 2012 09:43:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Da fehlt das template &lt;typename T&gt; <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2179738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179738</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Sat, 11 Feb 2012 09:43:35 GMT</pubDate></item></channel></rss>