<?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[Friend und operator bei templaten?]]></title><description><![CDATA[<p>Hallo,</p>
<p>warum kann der Operator nicht auf die i-member zugreifen?</p>
<pre><code class="language-cpp">template&lt;class A&gt;class CTest;
template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b);

template&lt;class A&gt;class CTest
{
	template&lt;class B&gt; friend bool operator==&lt;A,B&gt;(const CTest&lt;A&gt;&amp;,const CTest&lt;B&gt;&amp;);
	template&lt;class B&gt; friend bool operator==&lt;B,A&gt;(const CTest&lt;B&gt;&amp;,const CTest&lt;A&gt;&amp;);

private:
	int i;
};

template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b)
{
	return a.i==b.i;
}

int main()
{
	CTest&lt;int&gt; a;
	CTest&lt;bool&gt; b;
	a==b;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/203457/friend-und-operator-bei-templaten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 14:02:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203457.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jan 2008 22:59:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 22:59:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>warum kann der Operator nicht auf die i-member zugreifen?</p>
<pre><code class="language-cpp">template&lt;class A&gt;class CTest;
template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b);

template&lt;class A&gt;class CTest
{
	template&lt;class B&gt; friend bool operator==&lt;A,B&gt;(const CTest&lt;A&gt;&amp;,const CTest&lt;B&gt;&amp;);
	template&lt;class B&gt; friend bool operator==&lt;B,A&gt;(const CTest&lt;B&gt;&amp;,const CTest&lt;A&gt;&amp;);

private:
	int i;
};

template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b)
{
	return a.i==b.i;
}

int main()
{
	CTest&lt;int&gt; a;
	CTest&lt;bool&gt; b;
	a==b;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441674</guid><dc:creator><![CDATA[friendlol]]></dc:creator><pubDate>Tue, 22 Jan 2008 22:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:38:18 GMT]]></title><description><![CDATA[<p>Weil Templates nicht zum friend erklärt werden können.</p>
<p>So geht das richtig:</p>
<pre><code class="language-cpp">template&lt;typename A&gt;
    class CTest
{
private:
    int i;

public:
    template &lt;typename B&gt;
        bool operator == (const CTest&lt;B&gt;&amp; rhs)
    { return i == rhs.i; }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441679</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:40:57 GMT]]></title><description><![CDATA[<p>sicher?</p>
<blockquote>
<p>Class templates can have friends. A class or class template, function, or function template can be a friend to a template class. Friends can also be specializations of a class template or function template, but not partial specializations.</p>
</blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441680</guid><dc:creator><![CDATA[friendlol]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:44:01 GMT]]></title><description><![CDATA[<p>Welchen Compiler benutzt du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441681</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:44:49 GMT]]></title><description><![CDATA[<p>VS 2008</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441682</guid><dc:creator><![CDATA[friendlol]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:49:01 GMT]]></title><description><![CDATA[<p>Mit MSVC 8 (extensions=aus) compiliert dein Code ohne Probleme.<br />
Comeau spuckt Zähne.</p>
<p>Keine Ahnung ob das so OK ist.<br />
Versuch mal die expliziten Parameter wegzugeben (also das &quot;&lt;A,B&gt;&quot; - B kann schön hergeleitet werden), vielleicht gehts dann.<br />
Wenn nicht würde ich einfach mal sagen dein Compiler kann nicht gut mit template friends umgehen.</p>
<p>Ansonsten: C++ Standard kaufen und nachgucken <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/1441683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441683</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Tue, 22 Jan 2008 23:57:02 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn nicht würde ich einfach mal sagen dein Compiler kann nicht gut mit template friends umgehen.</p>
</blockquote>
<p>Ich saß soeben an dem gleichen Problem unter g++<br />
template-friends können hierbei offensichtlich nicht auf private-member zugreifen.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441686</guid><dc:creator><![CDATA[HilfeSuchender_]]></dc:creator><pubDate>Tue, 22 Jan 2008 23:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 00:07:27 GMT]]></title><description><![CDATA[<p>Ich habe den code durch msvc 2005 express laufen lassen und es geht.<br />
minGW gibt follgende fehlermeldung aus, für die beiden friend declarationen.</p>
<p>invalid use of template-id <code>operator==&lt;A, B&gt;' in declaration of primary template invalid use of template-id</code>operator==&lt;B, A&gt;' in declaration of primary template</p>
<p>Vieleicht bei den einstellungen den schalter<br />
Spracherweiterungen deaktivieren: auf nein stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441691</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Wed, 23 Jan 2008 00:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 00:19:35 GMT]]></title><description><![CDATA[<p>Wenn der Compiler es für eine &quot;declaration of primary template&quot; hält kann es IMO nicht gehen. Zumindest verstehe ich das so dass er das zuvor deklarierte template im global namespace nicht findet, und daher glaubt dass die friend declaration ein neues template deklariert... Bloss wieso tut er das? *verwirrt-sei*</p>
<p><strong>camper, wo bist du???</strong> <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/1441696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441696</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 23 Jan 2008 00:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 01:54:19 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><strong>camper, wo bist du???</strong> <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>
</blockquote>
<p>Ich bin ja auch noch da <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>
<pre><code class="language-cpp">template&lt;class A&gt; class CTest
{
 template&lt;class X, class Y&gt;
 friend bool operator==( const CTest&lt;X&gt; &amp;a, const CTest&lt;Y&gt;&amp; b );

private:
    int i;
};

template&lt;class X, class Y&gt;
bool operator==( const CTest&lt;X&gt; &amp;a, const CTest&lt;Y&gt;&amp; b )
{
    return a.i == b.i;
}
</code></pre>
<p><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/1441707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441707</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 23 Jan 2008 01:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 08:18:58 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p><strong>camper, wo bist du???</strong> <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>
</blockquote>
<p>Ich bin ja auch noch da <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>
<pre><code class="language-cpp">template&lt;class A&gt; class CTest
{
 template&lt;class X, class Y&gt;
 friend bool operator==( const CTest&lt;X&gt; &amp;a, const CTest&lt;Y&gt;&amp; b );

private:
    int i;
};

template&lt;class X, class Y&gt;
bool operator==( const CTest&lt;X&gt; &amp;a, const CTest&lt;Y&gt;&amp; b )
{
    return a.i == b.i;
}
</code></pre>
<p><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>
</blockquote>
<p>Das würde aber bedeuten, dass jegliche operator== friend von CTest sind. Ich möchte aber, dass nur die operator==, mit denen CTest direkt zu tun hat(sagen wir mal operator==&lt;bool,int&gt;(CTest&lt;bool&gt;,CTest&lt;int&gt;), dann soll operator==&lt;bool,int&gt; nur friend von CTest&lt;bool&gt; und CTest&lt;int&gt; sein, und keinen anderen!).</p>
<p>Ansonsten funktioniert mein Code, wie gepostet, definitiv NICHT.</p>
<pre><code class="language-cpp">template&lt;class A&gt;class CTest;
template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b);

template&lt;class A&gt;class CTest
{
	template&lt;class B&gt; friend bool operator==&lt;&gt;(const CTest&lt;A&gt;&amp;,const CTest&lt;B&gt;&amp;);
	template&lt;class B&gt; friend bool operator==&lt;&gt;(const CTest&lt;B&gt;&amp;,const CTest&lt;A&gt;&amp;);
	//template&lt;class A_,class B_&gt; friend bool operator==&lt;&gt;(const CTest&lt;A_&gt;&amp;,const CTest&lt;B_&gt;&amp;);

private:
	int i;
};

template&lt;class A,class B&gt; bool operator==(const CTest&lt;A&gt;&amp; a,const CTest&lt;B&gt;&amp; b)
{
	return a.i==b.i;
}

int main()
{
	CTest&lt;int&gt; a;
	CTest&lt;bool&gt; b;
	a==b;
}
</code></pre>
<pre><code>Error	1	error C2248: 'CTest&lt;A&gt;::i' : cannot access private member declared in class 'CTest&lt;A&gt;'	main.cpp	16
Error	2	error C2248: 'CTest&lt;A&gt;::i' : cannot access private member declared in class 'CTest&lt;A&gt;'	main.cpp	16
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441774</guid><dc:creator><![CDATA[friendlol]]></dc:creator><pubDate>Wed, 23 Jan 2008 08:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 08:24:51 GMT]]></title><description><![CDATA[<p>Ach, bin ich wieder blöd heute. Steht doch da.</p>
<blockquote>
<p>Class templates can have friends. A class or class template, function, or function template can be a friend to a template class. Friends can also be specializations of a class template or function template, but <em><strong>not partial specializations</strong></em>.</p>
</blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441779</guid><dc:creator><![CDATA[friendlol]]></dc:creator><pubDate>Wed, 23 Jan 2008 08:24:51 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 09:54:52 GMT]]></title><description><![CDATA[<p>friendlol schrieb:</p>
<blockquote>
<blockquote>
<p>Class templates can have friends. A class or class template, function, or function template can be a friend to a template class. Friends can also be specializations of a class template or function template, but not partial specializations.</p>
</blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/f1b2td24.aspx</a></p>
</blockquote>
<p>Das war mir gänzlich unbekannt. Wieder was gelernt <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/1441833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441833</guid><dc:creator><![CDATA[audacia|off]]></dc:creator><pubDate>Wed, 23 Jan 2008 09:54:52 GMT</pubDate></item><item><title><![CDATA[Reply to Friend und operator bei templaten? on Wed, 23 Jan 2008 11:27:31 GMT]]></title><description><![CDATA[<p>Es gibt n standard workaround, wenn globale operatoren auf internen Daten arbeiten muessen ohne friend zu sein: die Operatoren mittels einer memberfunktion implementieren.<br />
weiss net ob das mit dem friend so geht</p>
<pre><code class="language-cpp">template&lt;class A&gt; class CTest
{
 template &lt;class B&gt;
  bool equalTo(CTest&lt;B&gt; const&amp; rhs) const
  { return i==rhs.i;}
 template &lt;class B&gt;
  friend CTest&lt;B&gt;::equalTo() const; 
private:
    int i;
};

template&lt;class A, class B&gt;
 bool operator==(CTest&lt;A&gt; const&amp; lhs, CTest&lt;B&gt; const&amp; rhs)
 { return lhs.equalTo(rhs); }
</code></pre>
<p>Ganz ohne friends gehts auch:</p>
<pre><code class="language-cpp">template&lt;class A&gt; class CTest
{
 template &lt;class B&gt;
 bool equalTo(CTest&lt;B&gt; const&amp; rhs) const
  { return rhs.equalTo(i); }

 bool equalTo(int i2) const
  { return i2 == i; }
private:
    int i;
};

template&lt;class A, class B&gt;
 bool operator==(CTest&lt;A&gt; const&amp; lhs, CTest&lt;B&gt; const&amp; rhs)
 { return lhs.equalTo(rhs); }
</code></pre>
<p>Gibt aber natuerlich eine vergleichsmoeglichkeit mit Int's dazu</p>
<p>Noch eine Moeglichkeit: da alle CTest's ein int beinhalten, erben wir:</p>
<pre><code class="language-cpp">class CTBase {
  int i;
protected:
  CTBase();
  ~CTBase();
public:
  bool equalTo(CTBase const&amp; rhs)
   {return rhs.i == i};
};

template&lt;class A&gt; class CTest : public CTBase
{
};

bool operator==(CTBase const&amp; lhs, CTBase const&amp; rhs) //nimmt auch CTest&lt;X&gt;
 { return lhs.equalTo(rhs); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441896</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 Jan 2008 11:27:31 GMT</pubDate></item></channel></rss>