<?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 zwei Parametern]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

void Foo(int a, int b)
{
	std::cout &lt;&lt; &quot;int&quot; &lt;&lt; std::endl;
}

void Foo(float a, float b)
{
	std::cout &lt;&lt; &quot;float&quot; &lt;&lt; std::endl;
}

int main()
{
	Foo( 1    , 1    );
	Foo( 1.0f , 1.0f );
	Foo( 1    , 1.0f ); // error
	Foo( 1.0f , 1    ); // error
}
</code></pre>
<p>Warum wird bei der 3. und 4. Variante nicht die float-Funktion aufgerufen? Wie lässt sich das am einfachsten lösen ohne zwei neue Überladungen zu schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231022/überladen-von-zwei-parametern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 26 Sep 2026 01:11:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231022.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jan 2009 16:14:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladen von zwei Parametern on Mon, 05 Jan 2009 16:20:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

void Foo(int a, int b)
{
	std::cout &lt;&lt; &quot;int&quot; &lt;&lt; std::endl;
}

void Foo(float a, float b)
{
	std::cout &lt;&lt; &quot;float&quot; &lt;&lt; std::endl;
}

int main()
{
	Foo( 1    , 1    );
	Foo( 1.0f , 1.0f );
	Foo( 1    , 1.0f ); // error
	Foo( 1.0f , 1    ); // error
}
</code></pre>
<p>Warum wird bei der 3. und 4. Variante nicht die float-Funktion aufgerufen? Wie lässt sich das am einfachsten lösen ohne zwei neue Überladungen zu schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1639935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1639935</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Mon, 05 Jan 2009 16:20:07 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von zwei Parametern on Mon, 05 Jan 2009 16:21:13 GMT]]></title><description><![CDATA[<p>Ich tippe man, weil die Umformungen int-&gt;float und float-&gt;int gleichwertig sind ....</p>
<p>Wie man sich weitere overloads sparen kann, weiß ich nicht, aber mit templates kann man sie sich oft &quot;automatisch erstellen&quot; lassen...</p>
<pre><code class="language-cpp">template &lt;typename T1, typename T2&gt;
void Foo(T1 a, T2 b) {
   cout &lt;&lt; &quot;float\n&quot;;
}
template &lt;&gt;
void Foo(int a, int b) {
   cout &lt;&lt; &quot;int\n&quot;;
}
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1639938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1639938</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 05 Jan 2009 16:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von zwei Parametern on Mon, 05 Jan 2009 16:35:26 GMT]]></title><description><![CDATA[<p>Ah, das ist schon mal gut. Bei mir kommt aber noch double hinzu. Wie würde man es dann am besten lösen?</p>
<p>Meine kürzeste Lösung sieht so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class T, class U&gt;
void Foo(T t, U u)
{
	std::cout &lt;&lt; &quot;double&quot; &lt;&lt; std::endl;
}

void Foo(int, float)
{
	std::cout &lt;&lt; &quot;float&quot; &lt;&lt; std::endl;
}

void Foo(float, int)
{
	std::cout &lt;&lt; &quot;float&quot; &lt;&lt; std::endl;
}

void Foo(int, int)
{
	std::cout &lt;&lt; &quot;int&quot; &lt;&lt; std::endl;
}

void Foo(float, float)
{
	std::cout &lt;&lt; &quot;float&quot; &lt;&lt; std::endl;
}

int main()
{
	std::cout &lt;&lt; &quot;Should be int:\n&quot;;
	Foo( 1    , 1    );
	std::cout &lt;&lt; &quot;Should be float:\n&quot;;
	Foo( 1.0f , 1.0f );
	Foo( 1    , 1.0f );
	Foo( 1.0f , 1    );
	std::cout &lt;&lt; &quot;Should be double:\n&quot;;
	Foo( 1.0  , 1.0  );
	Foo( 1.0f , 1.0  );
	Foo( 1    , 1.0  );
	Foo( 1.0  , 1.0f );
	Foo( 1.0  , 1    );
}
</code></pre>
<p>Geht's noch einfacher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1639954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1639954</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Mon, 05 Jan 2009 16:35:26 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von zwei Parametern on Mon, 05 Jan 2009 17:03:25 GMT]]></title><description><![CDATA[<p>Ah .... da wirst Du vermutlich auf ein Problem stoßen, weil &quot;normale&quot; Funktionen &quot;template-Instanzen&quot; immer vorzuziehen sind.<br />
Deswegen habe ich oben auch mit Spezialisierungen gearbeitet.</p>
<p>Prinzipiell &quot;lohnt&quot; sich das Ganze aber nur, wenn man wirklich etwas dadurch spart = für möglichst viele Typen denselben Ablaufpfad haben.<br />
Ein template zu bauen, deren einziger Sinn darin besteht, 25-mal spezialisiert zu werden, lohnt nicht.</p>
<p>Vielleicht solltest Du hier mal kurz innehalten und überlegen, was das Gemeinsame und das Unterschiedliche bei Deinen double-, float- und int-overloads sein soll.<br />
Ist es wirklich immer &quot;dieselbe Funktion&quot;? Oder nutzt wiederum diese Funktion nur unterschiedliche Teilaspekte (die man ihrerseits wieder typspezifisch wegkapseln könnte? Oder sind es eher ganz unterschiedliche Funktionen, die Du nur aus Bequemlichkeit (ist nichts Schlechtes) gleich benennst ? Oder ...?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1639970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1639970</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 05 Jan 2009 17:03:25 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von zwei Parametern on Mon, 05 Jan 2009 21:31:22 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ah .... da wirst Du vermutlich auf ein Problem stoßen, weil &quot;normale&quot; Funktionen &quot;template-Instanzen&quot; immer vorzuziehen sind.<br />
Deswegen habe ich oben auch mit Spezialisierungen gearbeitet.</p>
</blockquote>
<p>Also bei mir funktioniert der Code und ich bekommen die erwartete Ausgabe in MinGW und Visual C++.</p>
<blockquote>
<p>Prinzipiell &quot;lohnt&quot; sich das Ganze aber nur, wenn man wirklich etwas dadurch spart = für möglichst viele Typen denselben Ablaufpfad haben.<br />
Ein template zu bauen, deren einziger Sinn darin besteht, 25-mal spezialisiert zu werden, lohnt nicht.</p>
</blockquote>
<p>Ich brauche nur die drei Typen.</p>
<blockquote>
<p>Vielleicht solltest Du hier mal kurz innehalten und überlegen, was das Gemeinsame und das Unterschiedliche bei Deinen double-, float- und int-overloads sein soll.<br />
Ist es wirklich immer &quot;dieselbe Funktion&quot;? Oder nutzt wiederum diese Funktion nur unterschiedliche Teilaspekte (die man ihrerseits wieder typspezifisch wegkapseln könnte? Oder sind es eher ganz unterschiedliche Funktionen, die Du nur aus Bequemlichkeit (ist nichts Schlechtes) gleich benennst ? Oder ...?</p>
</blockquote>
<p>Es ist immer die gleiche Funktion es werden nur verschiedene Funktionen von OpenGL-Funktionen aufgerufen, die dann (besonders auf Mobilen-Geräten) mit int schneller laufen, manchmal aber float oder sogar double von Nöten ist.</p>
<p>Ich glaube ich werde das mit dem Template eher lassen, da man ja dann auch die Idee kommen könnte, komplizierte Typen zu übergeben, die sich dann evtl. sogar in double casten lassen und es dann zu ungewollten Fehlern kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640130</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Mon, 05 Jan 2009 21:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Überladen von zwei Parametern on Tue, 06 Jan 2009 07:53:46 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>...<br />
Ich brauche nur die drei Typen.<br />
...<br />
Es ist immer die gleiche Funktion es werden nur verschiedene Funktionen von OpenGL-Funktionen aufgerufen, die dann (besonders auf Mobilen-Geräten) mit int schneller laufen, manchmal aber float oder sogar double von Nöten ist....</p>
</blockquote>
<p>OK, das klingt für mich nach einem Fall, in dem das sinnvoll ist.</p>
<p>Ich würde trotzdem statt der einfachen Funktionen template-Spezialisierungen verwenden (kostet Dich letztlich nur die Zeile &quot;template&lt;&gt;&quot; und die Auslagerbarkeit - was aber nicht das Schlechteste ist), denn sobald irgendwann jemand einen weiteren Typen via template-Spezialisierung einpflegen will (was ja nicht verboten ist), kann es sein, dass sie von deinen Funktionen &quot;überdeckt&quot; wird.<br />
Ist allerdings nur noch eine Kleinigkeit...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640242</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 06 Jan 2009 07:53:46 GMT</pubDate></item></channel></rss>