<?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[[solved] Vererbung von typedefs bei Klassentemplates]]></title><description><![CDATA[<p>Hallo,<br />
bei normalen Klassen werden die typedefs ja vererbt:</p>
<pre><code class="language-cpp">class B {
public:
	typedef int TI;
};

class D : public B {
public:
	void Foo( TI i ) {}
};
</code></pre>
<p>Kann man das bei Klassentemplates auch haben?<br />
So wie ich es hier mit D1 und D2 gemacht habe, finde ich es nicht wirklich elegant.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class B {
public:
	typedef int TI;
};

template &lt;typename T&gt;
class D1 : public B&lt;T&gt; {
public:
	typedef typename B&lt;T&gt;::TI TI;
	void Foo( TI i ) {}
};

template &lt;typename T&gt;
class D2 : public B&lt;T&gt; {
public:
	void Foo( typename B&lt;T&gt;::TI i ) {}
};
</code></pre>
<p>Dobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281627/solved-vererbung-von-typedefs-bei-klassentemplates</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 14:58:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281627.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Feb 2011 22:31:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] Vererbung von typedefs bei Klassentemplates on Sat, 05 Feb 2011 09:49:21 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bei normalen Klassen werden die typedefs ja vererbt:</p>
<pre><code class="language-cpp">class B {
public:
	typedef int TI;
};

class D : public B {
public:
	void Foo( TI i ) {}
};
</code></pre>
<p>Kann man das bei Klassentemplates auch haben?<br />
So wie ich es hier mit D1 und D2 gemacht habe, finde ich es nicht wirklich elegant.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class B {
public:
	typedef int TI;
};

template &lt;typename T&gt;
class D1 : public B&lt;T&gt; {
public:
	typedef typename B&lt;T&gt;::TI TI;
	void Foo( TI i ) {}
};

template &lt;typename T&gt;
class D2 : public B&lt;T&gt; {
public:
	void Foo( typename B&lt;T&gt;::TI i ) {}
};
</code></pre>
<p>Dobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016816</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sat, 05 Feb 2011 09:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Vererbung von typedefs bei Klassentemplates on Fri, 04 Feb 2011 22:54:12 GMT]]></title><description><![CDATA[<p>Bei Klassentemplates werden die Typedefs genau so geerbt wie bei normalen Klassen. Der (das?) Typedef in D1 ist also redundant, und mMn. müsste auch einfach nur &quot;T1&quot; in D2 reichen.</p>
<p>Nochwas: wenn du von einer Template-Klasse ableitest, dann musst du die Template-Parameter nicht extra nochmal angeben.<br />
Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;class T&gt;
class FooBase
{
public:
	virtual void DoFoo()
	{
		std::cout &lt;&lt; &quot;type = &quot; &lt;&lt; typeid(T).name() &lt;&lt; &quot;\n&quot;;
	}
};

class IntFoo : public FooBase&lt;int&gt;
{
public:
	virtual void DoFoo()
	{
		std::cout &lt;&lt; &quot;IntFoo::DoFoo\n&quot;;
		FooBase::DoFoo(); // &lt;- FooBase&lt;int&gt; nicht nötig, einfach nur FooBase reicht
	}
};

int main()
{
	IntFoo ifoo;
	ifoo.DoFoo();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2016824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016824</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 04 Feb 2011 22:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Vererbung von typedefs bei Klassentemplates on Fri, 04 Feb 2011 23:12:15 GMT]]></title><description><![CDATA[<p>Danke, aber auch nachdem ich typeinfo includiert habe, funktioniert dein Beispiel bei mir (g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5) trotzdem noch nicht.</p>
<pre><code>20: error: ‘template&lt;class T&gt; class FooBase’ used without template parameters
</code></pre>
<p>Das Ursprungsproblem, geht auch nicht so einfach.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class B {
public:
    typedef int TI;
};

template &lt;typename T&gt;
class D : public B&lt;T&gt; {
public:
    void Foo( TI i ) {}
};
</code></pre>
<pre><code>10: error: ‘TI’ has not been declared
</code></pre>
<p>Sonst hätte ich nicht so doof gefragt. <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>
<p>Dobi</p>
<p>edit: PS: Für mich hört sich &quot;das typedef&quot; am besten an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016826</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Fri, 04 Feb 2011 23:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Vererbung von typedefs bei Klassentemplates on Sat, 05 Feb 2011 00:10:09 GMT]]></title><description><![CDATA[<p>Achja, das ist ja ein dependent-name. Sorry für den Unsinn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Die Basisklassen-Geschichte scheint auch ein MSVC-Fehlverhalten zu sein, das ich mir angewöhnt habe. Hm...</p>
<p>Vererbt wird das typedef natürlich trotzdem, nur kann man in der Definition von D1 bzw. D2 nicht einfach so &quot;darauf zugreifen&quot;, da das ja selbst Templates sind.<br />
Und &quot;unqualified names&quot; werden laut Standard als &quot;non-dependent&quot; interpretiert. TI ist aber nicht &quot;non-dependent&quot;, und wird daher nicht gefunden.</p>
<p>Was geht, ist <code>typename D1::TI</code> statt <code>typename B&lt;T&gt;::TI</code> . Immerhin ein wenig kürzer.<br />
Was IMO gehen sollte, ist &quot;using&quot;:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; 
class B { 
public: 
	typedef int TI; 
}; 

template &lt;typename T&gt; 
class D1 : public B&lt;T&gt; { 
public:
	using typename B&lt;T&gt;::TI;
	void Foo(TI i) {} 
};
</code></pre>
<p>MSVC und Comeau fressen das auch, GCC 4.5 mag es aber nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2016848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016848</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 05 Feb 2011 00:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Vererbung von typedefs bei Klassentemplates on Sat, 05 Feb 2011 09:39:03 GMT]]></title><description><![CDATA[<p>Ok, thx.</p>
<p>Dass using hier nicht mit der GCC funktioniert, ist für mich momentan kein Drama, weil wenn ich eh ne neue Zeile schreiben muss, ist es egal, ob statt ich</p>
<pre><code class="language-cpp">using typename B&lt;T&gt;::TI;
</code></pre>
<pre><code class="language-cpp">typedef typename B&lt;T&gt;::TI TI;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">typedef typename D1::TI TI;
</code></pre>
<p>schreibe, wobei ich letzte Version schon irgendwie seltsam finde, denn wenn ich an irgendwas mit &quot;D1::&quot; drankomme, würde man ja intuitiv vermuten, dass man innerhalb von D1 dann nicht mehr qualifizieren muss, egal ob dependent oder nicht.<br />
Wenn man jetzt mehrere abgeleitete Klassen und viele typedefs hat, ist es ja schon verlockend, die einfach mit dem Präprozessor überall reinzurotzen. <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="😉"
    /><br />
Aber die &quot;B&lt;T&gt;::&quot;-Version ist mit gerade am sympathischsten. Danke nochmal. <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/2016895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2016895</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sat, 05 Feb 2011 09:39:03 GMT</pubDate></item></channel></rss>