<?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[templates und Implementierungsvererbung]]></title><description><![CDATA[<p>Hallo, ich möchte in der Spezialisierung einer Klasse ein Objekt einer geerbten MemberKlasse erstellen, das gelingt aber nur auf dem Stack.</p>
<p>Weiss jemand wie man das macht ?</p>
<p>So sieht es aus :</p>
<pre><code class="language-cpp">template &lt;class T&gt; class A {
    ....
    protected:
        struct Node {
           .... 
        }
    ....
}
</code></pre>
<pre><code class="language-cpp">template &lt;class T&gt; class B : private A&lt;T&gt; {
    ....
    void add(const T&amp; e) {
        typename A&lt;T&gt;::Node *p; //passt
        p = new Node;  //geht nicht
        p = new A&lt;T&gt;::Node() //geht nicht
        ....
    }
    ....
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245188/templates-und-implementierungsvererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 21:55:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245188.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jul 2009 17:53:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templates und Implementierungsvererbung on Fri, 10 Jul 2009 17:53:19 GMT]]></title><description><![CDATA[<p>Hallo, ich möchte in der Spezialisierung einer Klasse ein Objekt einer geerbten MemberKlasse erstellen, das gelingt aber nur auf dem Stack.</p>
<p>Weiss jemand wie man das macht ?</p>
<p>So sieht es aus :</p>
<pre><code class="language-cpp">template &lt;class T&gt; class A {
    ....
    protected:
        struct Node {
           .... 
        }
    ....
}
</code></pre>
<pre><code class="language-cpp">template &lt;class T&gt; class B : private A&lt;T&gt; {
    ....
    void add(const T&amp; e) {
        typename A&lt;T&gt;::Node *p; //passt
        p = new Node;  //geht nicht
        p = new A&lt;T&gt;::Node() //geht nicht
        ....
    }
    ....
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740586</guid><dc:creator><![CDATA[Runnable]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to templates und Implementierungsvererbung on Fri, 10 Jul 2009 18:41:35 GMT]]></title><description><![CDATA[<p>1. Was heisst geht nicht?<br />
2. Ganz Standardkonform müsste es so lauten:</p>
<pre><code class="language-cpp">template&lt;typename&gt;
struct Foo
{
protected:
	struct Node
	{
	};
};

template&lt;typename T&gt;
struct Bar
	: public Foo&lt;T&gt;
{
	void foo()
	{
		typename Foo&lt;T&gt;::Node* p = new typename Foo&lt;T&gt;::Node();
		delete p;
	}
};

int main()
{
	Bar&lt;int&gt; bar;
	bar.foo();

	return 0;
}
</code></pre>
<p>Also zweimal ein <code>typename</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740622</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to templates und Implementierungsvererbung on Sat, 11 Jul 2009 08:41:20 GMT]]></title><description><![CDATA[<p>reduzieren und dir ein wenig Tipparbeit sparen kannst du, wenn du B ein privates typedef auf den A::Node spendierst:</p>
<pre><code class="language-cpp">template&lt;typename&gt; 
struct A
{
protected:
  struct Node;
};

template&lt;typename T&gt;
struct B : private A&lt;T&gt;
{
private:
  typedef typename A&lt;T&gt;::Node ANode;
public:
  void add(const T&amp;) 
  {
    ANode* aNode;
    aNode = new ANode();
     /* ... */
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740825</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 11 Jul 2009 08:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to templates und Implementierungsvererbung on Sat, 11 Jul 2009 12:38:48 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> yeah, danke</p>
<p>dieses typename ist dazu da, ne Zweideutigkeit zwischen Typ oder Funktionsaufruf aus der Welt zu schaffen, oder ??</p>
<p>Welche Konstellation müsste den vorherrschen, dass</p>
<p>A&lt;T&gt;::Node *p</p>
<p>ein gültiger Funktionszeiger wäre ?<br />
Irgendwie verstehe ich das nicht so ganz...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740932</guid><dc:creator><![CDATA[Runnable]]></dc:creator><pubDate>Sat, 11 Jul 2009 12:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to templates und Implementierungsvererbung on Sat, 11 Jul 2009 12:57:18 GMT]]></title><description><![CDATA[<p>Runnable schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> yeah, danke</p>
<p>dieses typename ist dazu da, ne Zweideutigkeit zwischen Typ oder Funktionsaufruf aus der Welt zu schaffen, oder ??</p>
<p>Welche Konstellation müsste den vorherrschen, dass</p>
<p>A&lt;T&gt;::Node *p</p>
<p>ein gültiger Funktionszeiger wäre ?<br />
Irgendwie verstehe ich das nicht so ganz...</p>
</blockquote>
<p>die Zweideutigkeit besteht zwischen Subtyp/typedef in A und Member (Funktion oder variable) von A allgemein. Per default geht der Compiler davon aus, dass es sich um ein Member handelt, daher muss man ihm explizit mitteilen dass es ein Typ ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740937</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 11 Jul 2009 12:57:18 GMT</pubDate></item></channel></rss>