<?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[Template-Klasse als Friend einer Template-Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Template-Klassen (oder nennt man die Klassentemplates?)</p>
<pre><code class="language-cpp">template&lt;class N, class C, class T&gt; class Base_Node
{
private:
	T* m_tree;
	...
public:
	void set_active();	
	...
}

template&lt;class N, class C, class T&gt; void Base_Node&lt;N, C, T&gt;::set_active() 
{ 
	m_tree-&gt;m_num_act_nodes++;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">template&lt;class N, class C&gt; class Base_Tree
{
private:
	int m_num_act_nodes;
	...
}
</code></pre>
<p>Bei den Instanzen von Base_Node wird für T eine aus Base_Tree abgeleitete (Nicht-Template-)Klasse eingesetzt, z.B.:</p>
<pre><code class="language-cpp">class Tree : public Base_Tree&lt;Node, Node_Container&gt;
class Node : public Base_Node&lt;Node, Node_Container, Tree&gt;
</code></pre>
<p>Mein Problem ist nun, dass ich ohne Base_Node als Friend in Base_Tree zu deklarieren, die Fehlermeldung</p>
<blockquote>
<p>‘int Base_Tree&lt;Node, Node_Container&gt;::m_num_act_nodes’ is private</p>
</blockquote>
<p>erhalte (was nicht überrascht).</p>
<p>Daher: Kann mir jemand sagen, wie die Friend-Deklaration von Base_Node in Base_Tree aussehen müsste (und ggf. ob man das so macht oder es schlechter Stil ist)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212131/template-klasse-als-friend-einer-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 06:54:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212131.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 May 2008 09:11:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Fri, 02 May 2008 09:11:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Template-Klassen (oder nennt man die Klassentemplates?)</p>
<pre><code class="language-cpp">template&lt;class N, class C, class T&gt; class Base_Node
{
private:
	T* m_tree;
	...
public:
	void set_active();	
	...
}

template&lt;class N, class C, class T&gt; void Base_Node&lt;N, C, T&gt;::set_active() 
{ 
	m_tree-&gt;m_num_act_nodes++;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">template&lt;class N, class C&gt; class Base_Tree
{
private:
	int m_num_act_nodes;
	...
}
</code></pre>
<p>Bei den Instanzen von Base_Node wird für T eine aus Base_Tree abgeleitete (Nicht-Template-)Klasse eingesetzt, z.B.:</p>
<pre><code class="language-cpp">class Tree : public Base_Tree&lt;Node, Node_Container&gt;
class Node : public Base_Node&lt;Node, Node_Container, Tree&gt;
</code></pre>
<p>Mein Problem ist nun, dass ich ohne Base_Node als Friend in Base_Tree zu deklarieren, die Fehlermeldung</p>
<blockquote>
<p>‘int Base_Tree&lt;Node, Node_Container&gt;::m_num_act_nodes’ is private</p>
</blockquote>
<p>erhalte (was nicht überrascht).</p>
<p>Daher: Kann mir jemand sagen, wie die Friend-Deklaration von Base_Node in Base_Tree aussehen müsste (und ggf. ob man das so macht oder es schlechter Stil ist)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501899</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Fri, 02 May 2008 09:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Fri, 02 May 2008 09:46:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class N, class C&gt; class Base_Tree
{
private:
    int m_num_act_nodes;
    ...
// friend-Deklarationen dürfen keine partiellen Spezialisierungen deklarieren, deshalb nicht:
//    template&lt;typename T&gt;
//    friend class Base_Node&lt; N, C, T &gt;;
// wir müssen also mehr Freunde als eigentlich nötig 
// (nämlich sämtliche Spezialisierungen des Templates Base_Node, nicht nur solche mit kompatiblen Templateparamtern) in Kauf nehmen:
    template&lt;typename NN, typename CC, typename T&gt;
    friend class Base_Node&lt; NN, CC, T &gt;;
}
</code></pre>
<p>An solchen friend-Deklarationen ist grundsätzlich nichts auszusetzen - ob sie im konkreten Fall sinnvoll sind, steht auf einem anderen Blatt.</p>
<p>Base_Node und Base_Tree sind Templates, genauer: Klassentemplates, weil sie Klassen generieren. Explizite Spezialisierungen dieser Templates sind Klassen, genauer: Templateklassen, weil sie aus Templates entstehen. Eigentlich ganz einfach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501919</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 02 May 2008 09:46:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 17:45:08 GMT]]></title><description><![CDATA[<p>Wenn ich</p>
<pre><code class="language-cpp">template&lt;typename NN, typename CC, typename T&gt; friend class Base_Node
</code></pre>
<p>in Base_Tree einfüge, erhalte ich die Fehlermeldung</p>
<blockquote>
<p>partial specialization ‘Base_Node&lt;NN, CC, T&gt;’ declared ‘friend’</p>
</blockquote>
<p>bezüglich dieser Zeile.</p>
<p>Weiss jemand, wie das zu interpretieren ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1571851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571851</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Tue, 26 Aug 2008 17:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 19:28:52 GMT]]></title><description><![CDATA[<p>Muss ein einfacher C&amp;P&amp;Edit-Fehler sein, in Kommentar steht es ja: eine friend-Deklaration darf keine partielle Spezialisierung deklarieren. Folglich</p>
<pre><code class="language-cpp">template&lt;typename, typename, typename&gt;
    friend class Base_Node;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1571894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571894</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 26 Aug 2008 19:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 19:51:53 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Base_Node und Base_Tree sind Templates, genauer: Klassentemplates, weil sie Klassen generieren. Explizite Spezialisierungen dieser Templates sind Klassen, genauer: Templateklassen, weil sie aus Templates entstehen. Eigentlich ganz einfach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Und noch einfacher wird's, wenn man für &quot;Template&quot; das deutsche Wort &quot;Vorlage&quot; einsetzt <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/1571901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571901</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 26 Aug 2008 19:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 20:25:35 GMT]]></title><description><![CDATA[<p>Sagt mal... Kennt ihr beide euch eigtl? ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1571925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571925</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 26 Aug 2008 20:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 20:59:30 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Sagt mal... Kennt ihr beide euch eigtl? ^^</p>
</blockquote>
<p>Wen meinst du jetzt? Also ich kenne jedenfalls niemanden hier von dem Board <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/1571942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571942</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 26 Aug 2008 20:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Tue, 26 Aug 2008 21:25:13 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Base_Node und Base_Tree sind Templates, genauer: Klassentemplates, weil sie Klassen generieren. Explizite Spezialisierungen dieser Templates sind Klassen, genauer: Templateklassen, weil sie aus Templates entstehen. Eigentlich ganz einfach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Und noch einfacher wird's, wenn man für &quot;Template&quot; das deutsche Wort &quot;Vorlage&quot; einsetzt <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>
</blockquote>
<p>Ich bevorzuge die direkte Übersetzung „Schablone“, das drückt IMHO besser aus, was da passiert. Ne Vorlage kann alles mögliche sein. Eine Schablone ist im technischen Sinn schon wesentlich spezifischer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1571957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571957</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 26 Aug 2008 21:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse als Friend einer Template-Klasse on Wed, 27 Aug 2008 09:49:59 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>Sagt mal... Kennt ihr beide euch eigtl? ^^</p>
</blockquote>
<p>Wen meinst du jetzt? Also ich kenne jedenfalls niemanden hier von dem Board <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>
</blockquote>
<p>Dich und camper ^^ Iwie habt ihr gewisse Parallelen - naja, egal ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572117</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 27 Aug 2008 09:49:59 GMT</pubDate></item></channel></rss>