<?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[Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;?]]></title><description><![CDATA[<p>Hallo,</p>
<p>da ich hier im Forum immer sehr viel aktiv unterwegs bin, sind mir diese schlüsswörter immer über den weg gelaufen, jedoch konnte ich mir den Sinn dieser codezeilen nicht immer genau erklären. daher wollte ich euch um Hilfe fragen und ob ihr mir erklären könnt was man damit machen kann?!</p>
<p>Danke und einen angenehmen Morgen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207823/was-bedeutet-quot-typedef-quot-und-quot-typename-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 09:52:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207823.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Mar 2008 07:32:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 07:32:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>da ich hier im Forum immer sehr viel aktiv unterwegs bin, sind mir diese schlüsswörter immer über den weg gelaufen, jedoch konnte ich mir den Sinn dieser codezeilen nicht immer genau erklären. daher wollte ich euch um Hilfe fragen und ob ihr mir erklären könnt was man damit machen kann?!</p>
<p>Danke und einen angenehmen Morgen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472539</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Mar 2008 07:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 08:02:35 GMT]]></title><description><![CDATA[<p>typedef gibt einem typen einfach einen anderen namen, so kann typen schnell einen Aussagekräftigeren Namen verpassen:</p>
<pre><code class="language-cpp">typedef std::vector&lt;unsigned int&gt; Personalnummern;
</code></pre>
<p>Auch kann man einer Klasse so mehr Informationen mitgeben. Zum Beispiel gibt die STL ihren Containern über typedefs die Information mit, welche Iteratoren verwendet werden:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class FooContainer
{
    public:
        typedef T* Iterator;
    ...
};

//will man nun einen Iterator speichern, kann man das so machen
typedef FooContainer&lt;int&gt; Container;
typedef Container::iterator Iterator;

Container container;
...
Iterator iter=container.begin();
//alternativ
FooContainer&lt;int&gt; container;
...
FooContainer&lt;int&gt;::Iterator iter=container.begin();
</code></pre>
<p>typename kommt nun im Zusammenhang von typedefs mit templates ins spiel. Zuvor muss man wissen, dass man mit dem :: Operator (wie in Container::Iterator) sowohl zugriff auf typedefs als auch statische Variablen haben kann.</p>
<p>Bei templates bekommt der Compiler ein Problem:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Foo
{
    private:
        typedef FooContainer&lt;T&gt;::Iterator Iterator;//Problem
};
</code></pre>
<p>Der Compiler weis an diesem Punkt nicht, was ::Iterator ist. Es könnte ein Typ oder eine statische Variable sein, und er kann das auch so ohne weiteres auch nicht herausfinden, weil FooContainer ja auch so aussehen könnte:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class FooContainer
{
    public:
        typedef T* Iterator;
    ...
};

//spezialisierung auf int
//dummes Beispiel incoming
template&lt;&gt;
class FooContainer&lt;int&gt;
{ 
    public:
        static int Iterator;
};
</code></pre>
<p>würde Foo&lt;int&gt; erstellt werden, währe FooContainer::Iterator eine statische Variable und kein typ, den typedef braucht.</p>
<p>Deswegen hat man im Standard beschlossen, dass ein normales &quot;FooContainer&lt;T&gt;::Iterator&quot; per default kein typ ist sondern eine statische variable. Um nun dem Compiler zu sagen, dass das doch ein typ ist, brauchst du typename:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Foo
{
    private:
        typedef typename FooContainer&lt;T&gt;::Iterator Iterator;//Lösung
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1472550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472550</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 12 Mar 2008 08:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 08:42:40 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>typedef gibt einem typen einfach einen anderen namen, so kann typen schnell einen Aussagekräftigeren Namen verpassen:</p>
</blockquote>
<p>ok alles klar, aber warum sollte ich datentypen unbedingt andere namen geben, ich meine, ein int ist für mich aussagekärftiger als irgend ein andere name für den datentyp. das erschließt sich mir noch nciht so ganz.</p>
<p>aber schonmal vielen dank für deine erklärung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472579</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Mar 2008 08:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 08:46:22 GMT]]></title><description><![CDATA[<p>zB ist eine Änderung von einem Typ zum Anderen dann viel leichter.</p>
<p>Und zB matrix2d ist für mich leserlicher als vector&lt; vector&lt; double &gt; &gt;.<br />
Oder gar matrix3x vector&lt; vector&lt; vector&lt; double &gt; &gt; &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472582</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 12 Mar 2008 08:46:22 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 08:52:07 GMT]]></title><description><![CDATA[<p>gut das is ne logische erklärung.</p>
<p>das ich das jetzt richtig verstanden habe wenn ich also dem vector&lt; vector&lt;int&gt; &gt; test einen anderen namen zuweißen will kann ich dsa also so machen</p>
<pre><code class="language-cpp">typedef vector&lt; vector&lt;int&gt; &gt; matrix2d
</code></pre>
<p>dann kann ich also mit matrix2d auf das ganze teilzugreifen oder hab ich das falshc verstanden</p>
<p>edit: also könnte ich dann sagen</p>
<pre><code class="language-cpp">matrix2d eigentlichervector;

eigentlichervector.push_back(11);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1472585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472585</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Mar 2008 08:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 09:12:28 GMT]]></title><description><![CDATA[<p>richtig verstanden <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>
<p>typedefs in templates können auch verwendet werden, damit wiederum andere templates darauf zugreifen können. Beispiel:</p>
<pre><code class="language-cpp">template &lt;class Container&gt;  //gibt das letzte Element eines Containers aus
void PrintLastEntry(Container const&amp; c) {
  if (c.size() == 0) return;
  typename Container::const_iterator it = c.begin();
  typename Container::value_type val = *it;
  while (++it != c.end()) val = *it;
  cout &lt;&lt; val &lt;&lt; endl;
}
</code></pre>
<p>Dieses Funktionstemplate ist auf alle Container anwendbar, die neben begin(), end() und size() noch die typedefs const_iterator und value_type beinhalten. Der Nutzer braucht z.B. nicht zu wissen, von welchem Typ die Iteratoren eines bestimmten STL-Containers nun wirklich sind, es könnten Pointer oder andere Konstrukte sein. Durch den typedef im Container kann der User einfach mit vector&lt;int&gt;::iterator den iteratortyp benennen ohne wissen zu müssen, ob bei seiner Standardbibliothek nun ein int* oder etwas komplizierteres dahintersteckt.</p>
<p>/edit: und ja, ich weiß dass mein template oben recht gruselig ist, es soll auch nur den Nutzen von typedefs zeigen und nicht abgetippt werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472598</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 12 Mar 2008 09:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 09:20:04 GMT]]></title><description><![CDATA[<p>danke schön, dann bin ich ja mal froh das ich das richtig umgesetzt hatte <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>
<p>schönen tag noch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472607</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Mar 2008 09:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 10:56:33 GMT]]></title><description><![CDATA[<p>Was man auch häufig sieht ist sowas:</p>
<pre><code class="language-cpp">typedef unsigned int tUInt
typedef signed int tInt
typedef unsigned short tUInt8
typedef signed short tInt8
...
</code></pre>
<p>Das Ganze dann in #ifdefs um zu schauen was für eine Plattform man hat usw.</p>
<p>So kann man sicherstellen das im Code auch mit den &quot;richtigen&quot; Typen auf allen Plattformen gearbeitet wird, da C++ ja nur Relationen zwischen den Typen vorgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472680</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 12 Mar 2008 10:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 10:58:54 GMT]]></title><description><![CDATA[<p>ok und wie kann ich so eine überpürfen durchführen, welcher datentyp auf welcher plattform der richtige ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472682</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 12 Mar 2008 10:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Was bedeutet &amp;quot;typedef&amp;quot; und &amp;quot;typename&amp;quot;? on Wed, 12 Mar 2008 11:03:43 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>ok und wie kann ich so eine überpürfen durchführen, welcher datentyp auf welcher plattform der richtige ist?</p>
</blockquote>
<p>so wie Fellhuhn es geschrieben hat, werden die werte aus den jeweiligen tabellen der Plattform abgeschrieben.</p>
<p>Eine andere Lösung läuft über template Magie wo das automatisch berechnet wird.<br />
Das ist aber schon ein paar ecken komplexer <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/1472683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472683</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 12 Mar 2008 11:03:43 GMT</pubDate></item></channel></rss>