<?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[Typename als Vorwärtsdeklaration?]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es eigentlich zur Zeit einen Vorschlag an das Standardisierungsgremium Vorwärtsdeklarationen robuster zu machen? Je nach Typ muss man die Vorwärtsdeklaration anders machen. Hier ein paar Beispiele:</p>
<pre><code class="language-cpp">typedef int Nodeid;
class Node;
namespace Graph {
   template&lt;typename T&gt; Edge;
}
</code></pre>
<p>Das ist nicht besonders robust, da sich die Art eines Typs ändern kann, man es überall nachziehen muss und man die Art des Typs kennen muss. Wenn zum Beispiel Nodeid auch zu einer Klasse wird, muss man das überall nachziehen. Ich würde da natürlicherweise das typename keyword für Vorwärtsdeklarationen nehmen. Das könnte alles erschlagen (wenn ich nicht etwas übersehe) und wäre robust.</p>
<pre><code class="language-cpp">typename Nodeid;
typename Node;
typename Graph::Edge;
</code></pre>
<p>Wenn sich die Art eines Typs ändert, muss man das dann trotzdem an vielen Stellen nachziehen, muss sich aber nicht um Vorwärtsdeklarationen kümmern. Der Hauptvorteil ist, dass man sich nicht durch die Includehierarchie einer gekauften Library wühlen muss, um eine Vorwärtsdeklaration zu erzeugen. Und folgendes geht auch nicht einfach so:</p>
<pre><code class="language-cpp">namespace std {
   class ostream;
}
</code></pre>
<p>Da muss man den Header &lt;iosfwd&gt; includen, der noch viel deklariert, das man nicht nutzt.</p>
<p>Gibt es also einen Standardisierungsvorschlag, das zu vereinfachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140325/typename-als-vorwärtsdeklaration</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 01:34:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140325.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Mar 2006 06:19:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typename als Vorwärtsdeklaration? on Tue, 14 Mar 2006 06:19:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es eigentlich zur Zeit einen Vorschlag an das Standardisierungsgremium Vorwärtsdeklarationen robuster zu machen? Je nach Typ muss man die Vorwärtsdeklaration anders machen. Hier ein paar Beispiele:</p>
<pre><code class="language-cpp">typedef int Nodeid;
class Node;
namespace Graph {
   template&lt;typename T&gt; Edge;
}
</code></pre>
<p>Das ist nicht besonders robust, da sich die Art eines Typs ändern kann, man es überall nachziehen muss und man die Art des Typs kennen muss. Wenn zum Beispiel Nodeid auch zu einer Klasse wird, muss man das überall nachziehen. Ich würde da natürlicherweise das typename keyword für Vorwärtsdeklarationen nehmen. Das könnte alles erschlagen (wenn ich nicht etwas übersehe) und wäre robust.</p>
<pre><code class="language-cpp">typename Nodeid;
typename Node;
typename Graph::Edge;
</code></pre>
<p>Wenn sich die Art eines Typs ändert, muss man das dann trotzdem an vielen Stellen nachziehen, muss sich aber nicht um Vorwärtsdeklarationen kümmern. Der Hauptvorteil ist, dass man sich nicht durch die Includehierarchie einer gekauften Library wühlen muss, um eine Vorwärtsdeklaration zu erzeugen. Und folgendes geht auch nicht einfach so:</p>
<pre><code class="language-cpp">namespace std {
   class ostream;
}
</code></pre>
<p>Da muss man den Header &lt;iosfwd&gt; includen, der noch viel deklariert, das man nicht nutzt.</p>
<p>Gibt es also einen Standardisierungsvorschlag, das zu vereinfachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1015791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1015791</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Tue, 14 Mar 2006 06:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Typename als Vorwärtsdeklaration? on Tue, 14 Mar 2006 07:58:48 GMT]]></title><description><![CDATA[<p>Klar könnte es so eine &quot;generische&quot; Forward-Deklaration dem Nutzer leichter machen - aber dafür wird es für den Compiler/Linker schwieriger, dir dein Programm zusammenzusetzen (btw, sobald der Compiler mehr machen soll als nur Pointer/Referenzen durch die Gegend zu reichen, reicht die Forward-Deklaration sowieso nicht mehr aus).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1015816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1015816</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 14 Mar 2006 07:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Typename als Vorwärtsdeklaration? on Tue, 14 Mar 2006 08:26:16 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Klar könnte es so eine &quot;generische&quot; Forward-Deklaration dem Nutzer leichter machen - aber dafür wird es für den Compiler/Linker schwieriger, dir dein Programm zusammenzusetzen (btw, sobald der Compiler mehr machen soll als nur Pointer/Referenzen durch die Gegend zu reichen, reicht die Forward-Deklaration sowieso nicht mehr aus).</p>
</blockquote>
<p>Das ist ja jetzt auch schon der Fall. Wenn das Layout oder die Größe eines Objektes benötigt werden, muss man den Header doch includen. Aber da ich noch fast ganz ohne Templates auskomme und nie inline benutze, kommt es sehr selten vor, dass ich in einem Header die vollständige Definition eines Typs benötige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1015822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1015822</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Tue, 14 Mar 2006 08:26:16 GMT</pubDate></item></channel></rss>