<?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-Definition]]></title><description><![CDATA[<p>Hallo</p>
<p>Es hört sich peinlich an aber ich habe keine Ahnung, wie ich diesen Operator ausserhalb der Klasse (also in der Source-Datei) definieren kann:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Foo
{
  friend T operator+ (const T&amp; Lhs, const T&amp; Rhs);
};
</code></pre>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290164/operator-definition</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 17:39:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290164.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jul 2011 16:57:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 16:57:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Es hört sich peinlich an aber ich habe keine Ahnung, wie ich diesen Operator ausserhalb der Klasse (also in der Source-Datei) definieren kann:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Foo
{
  friend T operator+ (const T&amp; Lhs, const T&amp; Rhs);
};
</code></pre>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095510</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 16:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:03:08 GMT]]></title><description><![CDATA[<p>Meinst du so?</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T operator+ (const T&amp; Lhs, const T&amp; Rhs)
{
//irgentetwas tuen...
}

template&lt;class T&gt;
class Foo
{
  friend T operator+ (const T&amp; Lhs, const T&amp; Rhs);
};
</code></pre>
<p>korrigiert mich, wenn ich Fehler gemacht habe <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>mfg D3lta</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095513</guid><dc:creator><![CDATA[D3lta]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:17:31 GMT]]></title><description><![CDATA[<p>Nein, ich meine fürs FNI.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095520</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:27:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class T&gt;
T operator+(const T&amp; Lhs, const T&amp; Rhs);

template&lt;class T&gt;
class Foo{
    friend T operator+ &lt;&gt;(const T&amp; Lhs, const T&amp; Rhs);
};

template&lt;class T&gt;
T operator+(const T&amp; Lhs, const T&amp; Rhs) {
	// impl
}
</code></pre>
<p>Klappt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095526</guid><dc:creator><![CDATA[schnickas]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:27:06 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:28:29 GMT]]></title><description><![CDATA[<p>Was für einen Sinn soll es denn haben, wenn der Operator für T Freund-Zugriff auf deine Foo&lt;&gt;-Klasse hat, von der der übergebene Typ vermutlich gar nichts weiß?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095527</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:32:00 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Was für einen Sinn soll es denn haben, wenn der Operator für T Freund-Zugriff auf deine Foo&lt;&gt;-Klasse hat, von der der übergebene Typ vermutlich gar nichts weiß?</p>
</blockquote>
<p>Der Template-Parameter <code>T</code> wird später mit dem Typ der Derived-Klasse gefüllt. Aber darum geht's ja zentral beim FNI, nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095529</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:38:37 GMT]]></title><description><![CDATA[<p>Auch wenn ich mich damit als Nichtwisser oute: Wofür steht denn das &quot;FNI&quot;? Und kannst du ein wenig mehr über diese Klassenstruktur zeigen?<br />
(Wenn es wirklich um Vererbungs-Beziehungen geht, hilft eventuell auch ein richtig platziertes <code>protected</code> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095536</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:38:52 GMT]]></title><description><![CDATA[<p>Erklär uns lieber, was du unter FNI verstehst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095537</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:47:00 GMT]]></title><description><![CDATA[<p>FNI (Friend Name Injection) ist ein Teil des ADLs (Argument Dependet Lookup). FNI besagt, dass verwandte Klassen (nur nach oben) nach befreundeten Operatoren (Sichtbarkeit ist völlig egal) durchsucht werden:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Notequal
{
  friend bool operator!= (const T&amp; Lhs, const T&amp; Rhs)
  {
    return !(Lhs == Rhs);
  }
};
class MyInt : Notequal&lt;MyInt&gt;
{
  public:
    int Value;
    bool operator== (const MyInt&amp; Rhs) const
    {
      return this-&gt;Value == Rhs.Value;
    }
};
int main()
{
  MyInt Foo, Bar;
  Foo == Bar; //Geht, logisch
  Foo != Bar; //Geht dank FNI
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095542</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:53:26 GMT]]></title><description><![CDATA[<p>Und was hindert dich daran, deinen Operator direkt in der Klassendefinition zu definieren (wie in deinem Beispielcode)? Mit Templates erübrigt es sich sowieso, den Code in einer eigenen Quelldatei zu verstecken (und wenn ich das richtig sehe, bleibt dem friend-Operator auch nicht viel übrig als andere Methoden von T zu nutzen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095547</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:55:38 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Es hört sich peinlich an aber ich habe keine Ahnung, wie ich diesen Operator ausserhalb der Klasse (also in der Source-Datei) definieren kann:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Foo
{
  friend T operator+ (const T&amp; Lhs, const T&amp; Rhs);
};
</code></pre>
<p>MfG, EOutOfResources</p>
</blockquote>
<p>Das ist unmöglich allgemein durchführbar, da du für jedes einzelne Templateargument eine eigene Funktionsdefinition schreiben müsstest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095552</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Operator-Definition on Wed, 20 Jul 2011 17:57:03 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und was hindert dich daran, deinen Operator direkt in der Klassendefinition zu definieren (wie in deinem Beispielcode)?</p>
</blockquote>
<p>So hatte ich es ursprünglich auch aber ich wollte wissen, ob und wie man den <code>friend</code> -Operator in die Source-Datei packen kann.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Das ist unmöglich allgemein durchführbar, da du für jedes einzelne Templateargument eine eigene Funktionsdefinition schreiben müsstest.</p>
</blockquote>
<p>Achso. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095554</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:57:03 GMT</pubDate></item></channel></rss>