<?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[Schlüsselwort typename in einer Template Funktion]]></title><description><![CDATA[<p>Gude,</p>
<p>wann genau muss man innerhalb einer Template Funktion, oder beim Template-Funktionsnamen zusätzlich das Schlüsselwort typename vorstellen? Versteh das nicht so ganz.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201890/schlüsselwort-typename-in-einer-template-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 11:04:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201890.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jan 2008 13:19:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 13:19:19 GMT]]></title><description><![CDATA[<p>Gude,</p>
<p>wann genau muss man innerhalb einer Template Funktion, oder beim Template-Funktionsnamen zusätzlich das Schlüsselwort typename vorstellen? Versteh das nicht so ganz.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431092</guid><dc:creator><![CDATA[the_other_one]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 13:42:46 GMT]]></title><description><![CDATA[<p>Wenn es nicht eindeutig ist das es sich um einen Datentyp handelt.</p>
<pre><code class="language-cpp">template&lt; class T &gt;
class bla {
   ...
   typedef int myInt;
   typedef typename T::iterator myIterator;
   ...
};
</code></pre>
<p>Beim 2. typedef weiß der Compiler schließlich nicht das<br />
iterator als Element des Template-Parameters wiederum ein Datentyp ist.<br />
In solchen Fällen setzt man ein typename davor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431112</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 13:56:37 GMT]]></title><description><![CDATA[<p>Typename ist eine versicherung, dass das nach dem typename wirklich ein typ ist.<br />
Gebraucht wird das typename immer nur dann wenn der ::operator benutzt wird.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Foo{
    typedef T::U Type;
};
</code></pre>
<p>Da T ein template ist, kann der Compiler nicht bestimmen, was U ist. U könnte eine Funktion, eine konstante oder ein typedef sein. Standardmäßig geht der Compiler dabei von einer Konstante oder einer Funktion aus. Um ihm mitzuteilen, dass du einen typ meinst, brauchst du ein typename.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Foo{
    typedef typename T::U Type;
};
</code></pre>
<p>auch wenn ich das hier grad für Klassen gezeigt hab, funktioniert das natürlich genauso bei Funktionen:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(const T&amp; t)
{
    T::U();
}
</code></pre>
<p>Was ist U? Funktion oder Typ? Der Compiler sagt Funktion und versucht dann beim aufrufen von foo eine Funktion U in T zu finden, die es eventuell nicht gibt.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(const T&amp; t)
{
    typename T::U();
}
</code></pre>
<p>Hier ist klar, dass ein Typ gemeint ist.</p>
<p>//edit fehler rauseditiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431116</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:56:37 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 13:53:41 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo(const T&amp; t)
{
    typedef T::U();
}
</code></pre>
<p>Hier ist klar, dass ein Typ gemeint ist.</p>
</blockquote>
<p>Da gehört natürlich dann auch type<strong>name</strong> T::U(); hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431125</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 13:56:04 GMT]]></title><description><![CDATA[<p>ahhh richtig. sorry, im test stands noch als typename.</p>
<p>*geht sich einen großen kaffe holen*</p>
<p>//edit ich editiers oben mal, sonst merkt sich das noch wer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431128</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schlüsselwort typename in einer Template Funktion on Sat, 05 Jan 2008 14:38:41 GMT]]></title><description><![CDATA[<p>Hey danke ihr zwei, jetzt bin ich schlauer!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431161</guid><dc:creator><![CDATA[the_other_one]]></dc:creator><pubDate>Sat, 05 Jan 2008 14:38:41 GMT</pubDate></item></channel></rss>