<?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[Problem mit Templates]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich versuche gerade ca folgendes (Vorsicht, die Funktion zur Überladung des &quot;+&quot; ist ist nicht kompilierbar und soll meine Gedankengänge etwas verdeutlichen)</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class A {

public:
	T x;
	A(int init) : x(init) {}
};

template &lt;typename T, typename U, typename Z&gt;
A&lt;typeid(tmp).name&gt; operator+(A&lt;T&gt; lhs, A&lt;U&gt; rhs) {
	auto tmp = lhs.x + rhs.x;
	return A&lt;typeid(tmp).name&gt;(tmp);
}

int main()
{
	A&lt;int&gt; a(1);
	A&lt;float&gt; b(2.1f);

	std::cout &lt;&lt; (a+b).x &lt;&lt; std::endl;

        return 0;
}
</code></pre>
<p>Das Problem ist folgendes, ich möchte, falls ich wie Beispielsweise in der Main-Funktion ein A&lt;int&gt; und ein A&lt;float&gt; addiere, final ein A&lt;float&gt; erhalte.</p>
<p>Weiß einer von euch wie man das elegant realisieren kann, dass dies allgemein für alle Standardtypen die sich implizit ineinander casten lassen funktioniert?</p>
<p>Gruß <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/topic/301943/problem-mit-templates</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 17:18:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301943.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2012 16:23:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 16:23:41 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich versuche gerade ca folgendes (Vorsicht, die Funktion zur Überladung des &quot;+&quot; ist ist nicht kompilierbar und soll meine Gedankengänge etwas verdeutlichen)</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class A {

public:
	T x;
	A(int init) : x(init) {}
};

template &lt;typename T, typename U, typename Z&gt;
A&lt;typeid(tmp).name&gt; operator+(A&lt;T&gt; lhs, A&lt;U&gt; rhs) {
	auto tmp = lhs.x + rhs.x;
	return A&lt;typeid(tmp).name&gt;(tmp);
}

int main()
{
	A&lt;int&gt; a(1);
	A&lt;float&gt; b(2.1f);

	std::cout &lt;&lt; (a+b).x &lt;&lt; std::endl;

        return 0;
}
</code></pre>
<p>Das Problem ist folgendes, ich möchte, falls ich wie Beispielsweise in der Main-Funktion ein A&lt;int&gt; und ein A&lt;float&gt; addiere, final ein A&lt;float&gt; erhalte.</p>
<p>Weiß einer von euch wie man das elegant realisieren kann, dass dies allgemein für alle Standardtypen die sich implizit ineinander casten lassen funktioniert?</p>
<p>Gruß <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/2199678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199678</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 16:37:42 GMT]]></title><description><![CDATA[<p>Nur so ne Idee, nicht getestet:</p>
<pre><code class="language-cpp">template &lt;typename U, typename V&gt;
auto operator +(A&lt;U&gt; lhs, A&lt;V&gt; rhs) -&gt; A&lt;decltype(lhs.x + rhs.x)&gt;
{
  return lhs.x + rhs.x;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199686</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:37:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 16:44:41 GMT]]></title><description><![CDATA[<p>Wenn das von dot nicht geht, kannst du die andere C++11-Lösung probieren:</p>
<pre><code class="language-cpp">template &lt;typename T, typename U,
          typename Z = decltype(std::declval&lt;T&gt;()+std::declval&lt;U&gt;())&gt;
A&lt;Z&gt; operator+(A&lt;T&gt; lhs, A&lt;U&gt; rhs) {
  return A&lt;Z&gt;(lhs.x + rhs.x);
}
</code></pre>
<p>Wenn du kein C++11 hast, geht es auch, aber dann wirds wüst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199689</guid><dc:creator><![CDATA[einfachmalso]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:34:40 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Hilfen <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>
<p>Leider bekomme ich für die Version von &quot;einfachmalso &quot; den Fehler, dass + für die Operanden nicht definiert sein soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Weiß zufällig einer warum?</p>
<p>Die andere Version von &quot;dot&quot; kompiliert zwar, aber gibt eine &quot;3&quot; aus anstatt &quot;3.1.&quot;<br />
Was genau macht &quot;-&gt; A&lt;decltype(lhs.x + rhs.x)&gt;&quot; ?</p>
<p>Gruß <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/2199800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199800</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:42:41 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Was genau macht &quot;-&gt; A&lt;decltype(lhs.x + rhs.x)&gt;&quot; ?</p>
</blockquote>
<p>Es setzt den Rückgabetyp der Funktion auf den Typ des Ausdrucks lhs.x + rhs.x, bei int und float sollte das float sein.<br />
Das gibt bei mir wie erwartet 8.3 aus:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
struct A
{
	T x;
	A(T x)
		: x(x)
	{}
};

template &lt;typename T, typename U&gt;
auto operator + (const A&lt;T&gt;&amp; lhs, const A&lt;U&gt;&amp; rhs) -&gt; A&lt;decltype(lhs.x + rhs.x)&gt;
{
	return A&lt;decltype(lhs.x + rhs.x)&gt;(lhs.x + rhs.x);
}

int main()
{
	A&lt;int&gt; a1(5);
	A&lt;float&gt; a2(3.3f);
	std::cout &lt;&lt; (a1 + a2).x &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199801</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:42:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:39:09 GMT]]></title><description><![CDATA[<p>Was wäre denn der Unterschied zu</p>
<pre><code class="language-cpp">template &lt;typename U, typename V&gt;
A&lt;decltype(lhs.x + rhs.x)&gt; operator +(A&lt;U&gt; lhs, A&lt;V&gt; rhs) -&gt;
{
  return lhs.x + rhs.x;
}
</code></pre>
<p>Gruß <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/2199802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199802</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:41:57 GMT]]></title><description><![CDATA[<p>Siehe mein Edit.<br />
Der Unterschied ist, dass es nicht kompiliert, weil lhs und rhs da noch gar nicht bekannt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199804</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:42:40 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Die andere Version von &quot;dot&quot; kompiliert zwar, aber gibt eine &quot;3&quot; aus anstatt &quot;3.1.&quot;</p>
</blockquote>
<p>Wie sieht der Code dazu aus?</p>
<p>MatheStein schrieb:</p>
<blockquote>
<p>Was genau macht &quot;-&gt; A&lt;decltype(lhs.x + rhs.x)&gt;&quot; ?</p>
</blockquote>
<p><code>decltype()</code> liefert den Typ eines Ausdrucks.<br />
<code>A&lt;decltype(lhs.x + rhs.x)&gt;</code> entspricht also <code>A&lt;</code> <em>Was auch immer lhs.x + rhs.x produziert</em> <code>&gt;</code> .<br />
Die Syntax mit <code>auto</code> und dem <code>-&gt;</code> gefolgt von einem Typ ist eine alternative Möglichkeit den Rückgabetyp einer Funktion zu deklarieren. Vorteil dabei ist, dass hinter der Parameterliste die Parameter <code>lhs</code> und <code>rhs</code> bekannt sind und ich daher über <code>decltype()</code> dem Compiler sagen kann, dass er den passenden Typ doch bitte selbst rausfinden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199805</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:44:16 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort <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>
<p>Wie nennt man das Konzept mit dem Pfeil, bzw was muss man dafür googlen?</p>
<p>Gruß <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/2199806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199806</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:45:45 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax" rel="nofollow">http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199807</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:49:30 GMT]]></title><description><![CDATA[<p>Jap. Man spricht dabei von einem &quot;trailing-return-type&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199808</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates on Sat, 07 Apr 2012 23:51:33 GMT]]></title><description><![CDATA[<p>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/2199809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199809</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Sat, 07 Apr 2012 23:51:33 GMT</pubDate></item></channel></rss>