<?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[operator= bei template-klassen]]></title><description><![CDATA[<p>hallo,<br />
ich habe eine Klasse CTest mit zwei Template-Argumente, wobei der zweite relativ unwichtig ist (eigentlich nur ne Trais-Klasse).</p>
<pre><code class="language-cpp">template&lt;class A, class T&gt; CTest
{
public:
A m_a;

//...
}
</code></pre>
<p>Nun möchte ich einen operator= anbieten, welcher den m_a-Wert eines CTest&lt;A, IrgendeineTraitsKlasse&gt; in eine CTest&lt;A, IrgendeineANDERETraitsKlasse&gt; kopiert.<br />
Dazu sollte aber auch operator= für CTest&lt;A, IrgendeineTraitsKlasse&gt; und CTest&lt;A, IrgendeineTraitsKlasse&gt; funktionieren.</p>
<p>Ich habe es erstmal so gelöst:</p>
<pre><code class="language-cpp">template&lt;class A, class T&gt; CTest
{
public:
A m_a;

template&lt;class T_&gt; void operator=(CTest&lt;A,T_&gt;&amp; Test_)
{
m_a=Test_.m_a;
}

//...
}
</code></pre>
<p>Das klappt soweit auch wunderbar, nur leider nimmt VC++ für den operator= mit der gleichen Traits-Klasse den selbst generierten operator=.</p>
<pre><code class="language-cpp">CTest&lt;int,IntTrait1&gt; A(0);
CTest&lt;int,IntTrait2&gt; B(0);
A=B; //geht
CTest&lt;int,IntTrait1&gt; C(0);
A=C; //geht nicht; Compiler nimmt selbst gebauten operator=
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/180437/operator-bei-template-klassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 19:26:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180437.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 May 2007 16:30:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator= bei template-klassen on Wed, 02 May 2007 16:30:17 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich habe eine Klasse CTest mit zwei Template-Argumente, wobei der zweite relativ unwichtig ist (eigentlich nur ne Trais-Klasse).</p>
<pre><code class="language-cpp">template&lt;class A, class T&gt; CTest
{
public:
A m_a;

//...
}
</code></pre>
<p>Nun möchte ich einen operator= anbieten, welcher den m_a-Wert eines CTest&lt;A, IrgendeineTraitsKlasse&gt; in eine CTest&lt;A, IrgendeineANDERETraitsKlasse&gt; kopiert.<br />
Dazu sollte aber auch operator= für CTest&lt;A, IrgendeineTraitsKlasse&gt; und CTest&lt;A, IrgendeineTraitsKlasse&gt; funktionieren.</p>
<p>Ich habe es erstmal so gelöst:</p>
<pre><code class="language-cpp">template&lt;class A, class T&gt; CTest
{
public:
A m_a;

template&lt;class T_&gt; void operator=(CTest&lt;A,T_&gt;&amp; Test_)
{
m_a=Test_.m_a;
}

//...
}
</code></pre>
<p>Das klappt soweit auch wunderbar, nur leider nimmt VC++ für den operator= mit der gleichen Traits-Klasse den selbst generierten operator=.</p>
<pre><code class="language-cpp">CTest&lt;int,IntTrait1&gt; A(0);
CTest&lt;int,IntTrait2&gt; B(0);
A=B; //geht
CTest&lt;int,IntTrait1&gt; C(0);
A=C; //geht nicht; Compiler nimmt selbst gebauten operator=
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1277719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277719</guid><dc:creator><![CDATA[Y0da]]></dc:creator><pubDate>Wed, 02 May 2007 16:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to operator= bei template-klassen on Wed, 02 May 2007 16:58:37 GMT]]></title><description><![CDATA[<p>Wenn 2 Funktionen in Frage kommen, wird bei der Entscheidung<br />
die &quot;bessere&quot; genommen. In diesem Fall ist F1 besser als F2, wenn</p>
<p>- ...<br />
- F1 is a non-template function and F2 is a template function specialization, ...</p>
<p>(C++ Standard 13.3.3, S. 220)</p>
<p>Daher wird der implizite op= als besser betrachtet.<br />
D.h. für den gewünschten Zweck müsste op= für &lt;A,T&gt; explizit<br />
definiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277737</guid><dc:creator><![CDATA[Helpie]]></dc:creator><pubDate>Wed, 02 May 2007 16:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to operator= bei template-klassen on Wed, 02 May 2007 16:58:43 GMT]]></title><description><![CDATA[<p>Ein Templatezuweisungsoperator ist niemals ein Kopierzuweisungsoperator (ganz analog zum Copy-ctor). Den musst du also in jedem Falle noch deklarieren. Im Zweifel kannst du ihn ja auf die Templatevariante zurückführen:</p>
<pre><code class="language-cpp">void operator=(CTest&amp; Test_)
{
    return operator=&lt;T&gt;(Test);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1277738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277738</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 May 2007 16:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to operator= bei template-klassen on Wed, 02 May 2007 17:03:13 GMT]]></title><description><![CDATA[<p>Helpie schrieb:</p>
<blockquote>
<p>D.h. für den gewünschten Zweck müsste op= für &lt;A,T&gt; explizit<br />
definiert werden.</p>
</blockquote>
<p>Die Existenz einer besonderen Spezialisierung ist unerheblich. Für Zwecke der Überladungsauflösung kommt es stets nur auf die Signatur das Primärtemplates an. Ein normaler Copy-Operator= existiert <em>immer</em> - im Zweifel durch den Compiler deklariert und wird im Regelfall gegenüber einer Templatedeklaration vorgezogen werden (abgesehen von Sondernfällen wie const-Overloads).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277746</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 May 2007 17:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to operator= bei template-klassen on Wed, 02 May 2007 17:19:13 GMT]]></title><description><![CDATA[<p>Camper, ich liebe dich. Danke.</p>
<p>PS: lol. Glückwunsch zum 2000 post, der, Oh wunder, ein Doppelpost ist!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277759</guid><dc:creator><![CDATA[Y0da]]></dc:creator><pubDate>Wed, 02 May 2007 17:19:13 GMT</pubDate></item></channel></rss>