<?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[Vorwärtsdeklaration verschachtelter Typen]]></title><description><![CDATA[<p>Ist es in C++ möglich, Typen, die innerhalb einer Klasse definiert sind, vorwärts zu deklarieren, wenn von der Klasse selber nur eine Vorwärtsdeklaration vorhanden ist?</p>
<p>Es geht mir um sowas:</p>
<pre><code class="language-cpp">// ==========================================
// MyClass.hpp
class MyClass
{
    public:
        struct MyProxy
        {
        };
};

// ==========================================
// OtherClass.hpp
class MyClass;
struct MyClass::MyProxy; // &lt;- wie?

class OtherClass
{
    MyClass::MyProxy* Ptr;
    void Function(const MyClass::MyProxy&amp;);
};
</code></pre>
<p>Es geht nur darum, dass der Compiler weiss, dass <code>MyClass::MyProxy</code> ein Typ ist, damit Zeiger, Referenzen und Funktionen mit diesem Typen deklariert werden können.</p>
<p>Über <code>void*</code> könnte ich mir zwar die Abhängigkeit sparen, doch das ist alles andere als schön. Und da es meistens bessere Möglichkeiten gibt, frage ich mich, ob das hier auch der Fall ist (das Proxy sollte in der Klasse bleiben)...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234000/vorwärtsdeklaration-verschachtelter-typen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 13:57:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234000.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Feb 2009 18:34:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 18:36:10 GMT]]></title><description><![CDATA[<p>Ist es in C++ möglich, Typen, die innerhalb einer Klasse definiert sind, vorwärts zu deklarieren, wenn von der Klasse selber nur eine Vorwärtsdeklaration vorhanden ist?</p>
<p>Es geht mir um sowas:</p>
<pre><code class="language-cpp">// ==========================================
// MyClass.hpp
class MyClass
{
    public:
        struct MyProxy
        {
        };
};

// ==========================================
// OtherClass.hpp
class MyClass;
struct MyClass::MyProxy; // &lt;- wie?

class OtherClass
{
    MyClass::MyProxy* Ptr;
    void Function(const MyClass::MyProxy&amp;);
};
</code></pre>
<p>Es geht nur darum, dass der Compiler weiss, dass <code>MyClass::MyProxy</code> ein Typ ist, damit Zeiger, Referenzen und Funktionen mit diesem Typen deklariert werden können.</p>
<p>Über <code>void*</code> könnte ich mir zwar die Abhängigkeit sparen, doch das ist alles andere als schön. Und da es meistens bessere Möglichkeiten gibt, frage ich mich, ob das hier auch der Fall ist (das Proxy sollte in der Klasse bleiben)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662012</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 18:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 18:44:53 GMT]]></title><description><![CDATA[<p>Also VC++ schluckt das..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662023</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 11 Feb 2009 18:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 18:52:48 GMT]]></title><description><![CDATA[<p>Bist du sicher, dass du &quot;MyClass.hpp&quot; nicht inkludiert hast?</p>
<p>Bei mir (MSVC++ 2008 Express) erhalte ich schon in dieser Zeile</p>
<pre><code class="language-cpp">struct MyClass::MyProxy;
</code></pre>
<p>die Fehlermeldung</p>
<blockquote>
<p>error C2027: Verwendung des undefinierten Typs &quot;MyClass&quot;</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1662031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662031</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 18:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 18:54:38 GMT]]></title><description><![CDATA[<p>Du kannst innerhalb der Klasse eine forward declaration von nested classes machen, aber nicht von ausserhalb <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>Es gab aber glaube ich ein Proposal für C++0x für dieses Feature^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662034</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Wed, 11 Feb 2009 18:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 19:06:19 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Bist du sicher, dass du &quot;MyClass.hpp&quot; nicht inkludiert hast?</p>
</blockquote>
<p>Habe nur C/P gemacht. <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="😉"
    /> - Nein, demfall scheint das nicht zu gehen..</p>
<p>Das einzige, was geht ist die reine Vorwärtsdeklaration der nested Klasse. Dann müsstest du da halt einen Wrapper schreiben, der dir dann den Rest von MyClass ebenfalls durch diese Methode enthält.</p>
<pre><code class="language-cpp">class MyClass
{
 public:
 struct MyProxy;
...
};
...

struct MyClass::MyProxy 
{
 ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1662049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662049</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 11 Feb 2009 19:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 19:18:04 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Habe nur C/P gemacht. <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>
</blockquote>
<p>Dabei hab ich extra fette ===-Trennlinien gemacht. Vielleicht wären zwei Felder besser gewesen... <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>drakon schrieb:</p>
<blockquote>
<p>Dann müsstest du da halt einen Wrapper schreiben, der dir dann den Rest von MyClass ebenfalls durch diese Methode enthält.</p>
</blockquote>
<p>Da verstehe ich nicht, wie du das meinst. Damit innerhalb des Wrappers der Typ <code>MyClass</code> bekannt ist, muss man ja dessen Header auch inkludieren.</p>
<p>Mir fällt gerade keine typsichere Lösung ein. Aber den Header zu inkludieren finde ich auch nicht gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662065</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 19:18:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 19:25:38 GMT]]></title><description><![CDATA[<p>Hmm. Wenn du das so machen willst, kommst du anscheinen um einen cast nicht herum..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662069</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 11 Feb 2009 19:25:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 19:38:30 GMT]]></title><description><![CDATA[<p>Also was ich gemeint habe:</p>
<pre><code class="language-cpp">class MyClass;

//Das wird halt includede, ist aber nicht so tratisch
class MyWrapperClass
{
public:
	struct MyProxy;
private:
	MyClass* body;
};

struct MyWrapperClass::MyProxy;

class OtherClass
{
    MyWrapperClass::MyProxy* Ptr;
    void Function(const MyWrapperClass::MyProxy&amp;);
};
</code></pre>
<p>Ist nicht mehr ganz das gleiche und die Verbindung direkt zu MyClass ist auch nicht da, aber imo ist es auch fragwürdig eine public nested Class zu haben.. Warum ist die nicht eh schon ganz unabhängig? - Ein namespace würde es wahrscheinlich ja auch tun. Und dann hast du praktisch das, was ich da gemacht habe..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662082</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 11 Feb 2009 19:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Wed, 11 Feb 2009 21:02:25 GMT]]></title><description><![CDATA[<p>Die Nested-Struktur ist nicht unabhängig, weil sie logisch zur äusseren Klasse gehört und Attributtypen der Klasse definiert. Ich finde es nicht gut, alles global zu haben, wenn es nur im Zusammenhang mit der Klasse gebraucht wird.</p>
<p>Ich hab jetzt noch ein wenig mit Templates rumprobiert. Dabei hat mich wieder eine Gegebenheit, ab der ich mich schon mal geärgert habe, aufgeregt: Dass Templateargumente nicht ersetzt werden, wenn sie als Member gekennezeichnet sind. Was soll das bringen? Wenn ich innerhalb eines Templates einen Bezeichner verwende, der mit einem Templateparameter übereinstimmt, dann soll der auch ersetzt werden! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Ich war bei so etwas:</p>
<pre><code class="language-cpp">template &lt;typename Outer, typename Inner&gt;
struct NestedHacker
{
    typedef typename Outer::Inner Type; // geht nicht, weil Inner nicht ersetzt wird.
};
</code></pre>
<p>Also müsste ich es mit Makros lösen und hätte am Schluss so viele Indirektionen, dass es mir zu blöd wird. Naja, ich werde es wohl mit <code>void*</code> tun müssen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662154</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 11 Feb 2009 21:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 00:27:02 GMT]]></title><description><![CDATA[<p>Wie sollte man Inner uebergeben? Inner muss ja ein korrekter Typ sein...<br />
ein</p>
<pre><code class="language-cpp">NestedHacker&lt;vector&lt;int&gt;, iterator&gt; n;
</code></pre>
<p>kann ja nie kompilieren...</p>
<p>Textersetzung macht man mit #define</p>
<p>wenn Inner nur ein dummy ist, kann man aber wrappen:</p>
<pre><code class="language-cpp">struct iterator {} ; //dummy
struct pointer {} ; //dummy

template&lt;typename Base, typename Inner&gt;
struct inner_wrapper {};

template&lt;typename Outer&gt;
struct inner_wrapper&lt;Outer, iterator&gt; {
  typedef Outer::iterator type;
};
template&lt;typename Outer&gt;
struct inner_wrapper&lt;Outer, pointer&gt; {
  typedef Outer::pointer type;
};

template &lt;typename Outer, typename Inner&gt;
struct NestedHacker
{
    typedef inner_wrapper&lt;Outer, Inner&gt;::type type;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1662201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662201</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 12 Feb 2009 00:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 08:46:54 GMT]]></title><description><![CDATA[<p>Du hast Recht, ich habe dabei gar nicht mehr an das ursprüngliche Konzept der Templates gedacht. Eigentlich klar, dass das nicht ersetzt wird. Danke für deinen Vorschlag.</p>
<p>Das hilft mir allerdings nicht sehr viel, da die Nested-Typen nicht nur Dummys sind, sondern Informationen tragen. Momentan hab ichs deshalb mit <code>void*</code> gelöst.</p>
<p>/rant/ erwähnte etwas wegen neuem Standard, weiss jemand mehr darüber?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662286</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Feb 2009 08:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 11:06:09 GMT]]></title><description><![CDATA[<p>Auch wenn mir nicht einleuchtet warums unbedingt ein innerer Typ sein muss (auch äußere Hilfsklassen können mit zum Interface gezählt werden, genauso wie z.B. freie Operatorfunktionen etc.), folgendes in Kürze:</p>
<pre><code class="language-cpp">//==== NestedFwdDecl.hpp ====
template &lt;class T, size_t N = 1&gt;
struct NestedFwdDecl : public NestedFwdDecl&lt;O, N-1&gt; //iterierende Vererbung
{
   class Inner;
};

template &lt;class T&gt; struct NestedFwdDecl&lt;T, 0&gt; {}; //Ende der Iteration

//==== OtherClass.hpp ====
#include &quot;NestedFwdDecl.hpp&quot;

class Outer;

class OtherClass
{
  typename NestedFwdDecl&lt;Outer, 1&gt;::Inner* iptr1; //Benutzen der forwarddeklarationen
  void foo(typename NestedFwdDecl&lt;Outer, 2&gt;::Inner&amp; iref2);
};

//==== Outer.hpp ====
#include &quot;NestedFwdDecl.hpp&quot;
class Outer : public NestedFwdDecl&lt;Outer, 2&gt; //CRTP, damit andere Klassen andere innere Typen ableiten können.
{
  typedef typename NestedFwdDecl&lt;Outer, 1&gt;::Inner Inner1;
  typedef typename NestedFwdDecl&lt;Outer, 2&gt;::Inner Inner2;
};

//==== Outer.cpp ====
#include &quot;Outer.hpp&quot;
class NestedFwdDecl&lt;Outer, 1&gt;::Inner { /* Definition von Inner1 */};
class NestedFwdDecl&lt;Outer, 2&gt;::Inner { /* Definition von Inner2 */};
</code></pre>
<p>Zu beachten ist, dass im Beispiel das Template mit allen möglichen Werten für N instantiiert werden kann, ebenso kann z.B. class NestedFwdDecl&lt;Outer, 100&gt;::Inner definiert werden. Outer erbt allerdings nur von den ersten beiden NestedFwdDecl-Klassen (und von der dummy-Nullklasse), die anderen Klassen wären also keine inneren Klassen von Outer mehr. Bei Compilern mit <a href="http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=319" rel="nofollow">EBO</a> bringt die Vererbung keinerlei Größenzuwachs mit sich. Man könnte natürlich die lange vererbungshierarchie in eine breite Hierarchie verwandeln indem Outer von N einzelnen structs erbt, allerdings greift bei vielen Compilern die EBO nicht mehr, wenn sie mit Mehrfachvererbung zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662376</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Feb 2009 11:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 12:44:39 GMT]]></title><description><![CDATA[<p>Zum Vereinfachen noch zwei Makros dazu:</p>
<pre><code class="language-cpp">//==== NestedFwdDecl.hpp ====
template &lt;class T, size_t N = 1&gt;
struct NestedFwdDecl : public NestedFwdDecl&lt;O, N-1&gt; //iterierende Vererbung
{
   class Inner;
};

template &lt;class T&gt; struct NestedFwdDecl&lt;T, 0&gt; {}; //Ende der Iteration

#define NESTED_TYPEDEF(outer, n, name) typedef NestedClassFwdDecl&lt;outer,n&gt;::Inner name
#define NESTED_CLASS_DEF(outer, n) template&lt;&gt; class NestedClassFwdDecl&lt;outer,n&gt;::Inner

//==== OtherClass.hpp ====
#include &quot;NestedFwdDecl.hpp&quot;

class Outer;

class OtherClass
{
  NESTED_TYPEDEF(Outer, 1, Proxy);
  Proxy* proxptr1; //Benutzen der forwarddeklarationen
public:
  void foo(NestedFwdDecl&lt;Outer, 2&gt;::Inner&amp; iref2); //ohne typedef
};

//==== Outer.hpp ====
#include &quot;NestedFwdDecl.hpp&quot;
class Outer : public NestedFwdDecl&lt;Outer, 2&gt; 
{
  NESTED_TYPEDEF(Outer, 1, Inner1); //typedeft Outer::Inner1
  NESTED_TYPEDEF(Outer, 2, Inner2);
};

//==== Outer.cpp ====
#include &quot;Outer.hpp&quot;
NESTED_CLASS_DEF(Outer, 1)
{ 
  /* Definition von Inner1 */
};
NESTED_CLASS_DEF(Outer, 2)
{ 
  /* Definition von Inner2 */
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1662456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662456</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Feb 2009 12:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 13:16:32 GMT]]></title><description><![CDATA[<p>Wow, vielen Dank für deine Mühe, pumuckl. <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>
<p>Hast du das jetzt einfach so schnell aus dem Ärmel geschüttelt? Damit ist man ja richtig flexibel. Dachte ich doch, dass es auch ohne <code>void*</code> sauber geht. Irgendwie schon interessant, mit Templates und Präprozessor kann man sich für alles Workarounds basteln. <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>pumuckl schrieb:</p>
<blockquote>
<p>Auch wenn mir nicht einleuchtet warums unbedingt ein innerer Typ sein muss (auch äußere Hilfsklassen können mit zum Interface gezählt werden, genauso wie z.B. freie Operatorfunktionen etc.)</p>
</blockquote>
<p>Ich hatte zuerst auch eine freie Struktur, allerdings hat mein Projekt inzwischen so viele Klassen, dass ich diese ein wenig gliedern will. Da ich dies innerhalb des Projektes nicht mit Namensräumen mache, habe ich die Struktur in die logisch übergeordnete Klasse gepackt. Diese Klasse besitzt auch gleich ein Member vom Typ der Struktur (die Struktur fasst also gewisse Eigenschaften der Klasse zusammen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662482</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Feb 2009 13:16:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration verschachtelter Typen on Thu, 12 Feb 2009 13:43:56 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Hast du das jetzt einfach so schnell aus dem Ärmel geschüttelt?</p>
</blockquote>
<p>naja ganz so schnell wars nicht, die Mittagspause nicht mitgerechnet wars ca. ne halbe Stunde, vielleicht auch 40 min.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Irgendwie schon interessant, mit Templates und Präprozessor kann man sich für alles Workarounds basteln. <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>
</blockquote>
<p>Wenn man <em>Modern C++</em> und boost-Doku liest und beizeiten mal in die verschiedenen boost-header spickt wird man zu sowas inspiriert <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>Was mir an der Lösung noch nicht gefällt ist dass man problemlos Pointer auf innere Klassen deklarieren kann die es garnicht gibt (z.B. mit N&gt;2 im Beispiel).<br />
Man kann diese inneren Klassen sogar später definieren ohne dass einem der Compiler auf die Finger haut. Selbst die Ableitung von Outer vom Template darf man vergessen ohne dass es größere Probleme gibt - das einzige was die Sache beisammenhält ist die Vererbungsbeziehung. Das zu fixen wäre aber deutlich mehr Aufwand. Vor allem die Pointer auf nicht vorhandene innere Klassen kann man an ihrem Deklarationsort mit Sicherheit nicht detektieren, schließlich ist es ja Sinn des Ganzen, Pointer/Referenzen auf noch nicht definierte Klassen deklarieren zu können. Lediglich beim späteren Hantieren mit den Pointern und Referenzen wird man das merken weil die umgebenden Klassen eben nicht in der Hierarchie von Outer sind.<br />
Die Definition von ungültigen inneren Klassen könnte man evtl. verhindern, indem man ins NESTED_CLASS_DEF-Makro noch einen entsprechenden Compiletime-check einbaut, dazu muss die Klassendefinition von Outer allerdings davor geschehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662508</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 12 Feb 2009 13:43:56 GMT</pubDate></item></channel></rss>