<?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[inner&#x2F;nested interface]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin letztens über ein Codeschnipsel gestolpert, das mir doch etwas merkwürdig vorkam. Da wurde ein abstraktes Interface innerhalb eines anderen Interfaces deklariert. Also ein nested Interface sozusagen. Ähnliches hab ich auch schon in einer nicht abstrakten Klasse sehen können (also Interface nested in einer Klasse).</p>
<p>Gemeint ist sowas hier:</p>
<pre><code>class IFoo
{
public:
   class IBar
   {
   public:
      virtual void fBar() = 0;
   }

   virtual void fFoo() = 0;
};
</code></pre>
<p>Leider hält sich Google ziemlich bedeckt, was das Thema angeht. Es gibt nur Beispiele aus der Java-Welt, z.B. Map.Entry. Daher ein paar Fragen dazu:</p>
<p>- Wozu sollte man das machen? Kennt jemand Beweggründe dafür? Leider kenne ich den Kontext des Codeschnipsels nicht mehr, deshalb kann ich nicht sagen, was da der Anwendungsfall war. Für mich sah es nur sehr ungewohnt aus.</p>
<p>- Warum finde ich in Verbindung mit C++ dazu nichts? Weil es blödsinn ist? Weil noch niemand auf die Idee gekommen ist?</p>
<p>Habt vielen Dank,<br />
robert</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333546/inner-nested-interface</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 19:48:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333546.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jul 2015 17:09:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to inner&#x2F;nested interface on Tue, 14 Jul 2015 17:09:18 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin letztens über ein Codeschnipsel gestolpert, das mir doch etwas merkwürdig vorkam. Da wurde ein abstraktes Interface innerhalb eines anderen Interfaces deklariert. Also ein nested Interface sozusagen. Ähnliches hab ich auch schon in einer nicht abstrakten Klasse sehen können (also Interface nested in einer Klasse).</p>
<p>Gemeint ist sowas hier:</p>
<pre><code>class IFoo
{
public:
   class IBar
   {
   public:
      virtual void fBar() = 0;
   }

   virtual void fFoo() = 0;
};
</code></pre>
<p>Leider hält sich Google ziemlich bedeckt, was das Thema angeht. Es gibt nur Beispiele aus der Java-Welt, z.B. Map.Entry. Daher ein paar Fragen dazu:</p>
<p>- Wozu sollte man das machen? Kennt jemand Beweggründe dafür? Leider kenne ich den Kontext des Codeschnipsels nicht mehr, deshalb kann ich nicht sagen, was da der Anwendungsfall war. Für mich sah es nur sehr ungewohnt aus.</p>
<p>- Warum finde ich in Verbindung mit C++ dazu nichts? Weil es blödsinn ist? Weil noch niemand auf die Idee gekommen ist?</p>
<p>Habt vielen Dank,<br />
robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459785</guid><dc:creator><![CDATA[rob#rt]]></dc:creator><pubDate>Tue, 14 Jul 2015 17:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Tue, 14 Jul 2015 18:52:26 GMT]]></title><description><![CDATA[<p>Nennt sich nested classes und haben auch schon andere vor dir entdeckt (<a href="http://en.cppreference.com/w/cpp/language/nested_types" rel="nofollow">http://en.cppreference.com/w/cpp/language/nested_types</a>). Ist praktisch um Details der Implementierung zu verstecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459798</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 14 Jul 2015 18:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Tue, 14 Jul 2015 19:39:47 GMT]]></title><description><![CDATA[<p>Es geht im AFAICS mehr darum, dass diese verschachtelte Klasse abstrakt ist, und die sie umgebende genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459804</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 14 Jul 2015 19:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Wed, 15 Jul 2015 13:00:06 GMT]]></title><description><![CDATA[<p>Richtig. Es ging mir nur darum, warum man ein Interface in eine Klasse oder in ein weiteres Interface packen sollte. Ich war der Ansicht, dass gerade ein Interface für die Außenwelt bestimmt sei <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>Also wir mir scheint, steckt da nicht viel Magic dahinter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459903</guid><dc:creator><![CDATA[rob#rt]]></dc:creator><pubDate>Wed, 15 Jul 2015 13:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Wed, 15 Jul 2015 13:19:20 GMT]]></title><description><![CDATA[<p>rob#rt schrieb:</p>
<blockquote>
<p>Also wir mir scheint, steckt da nicht viel Magic dahinter...</p>
</blockquote>
<p>Nein, ist ja auch programmieren und nicht zaubern ...</p>
<p>Dein Beispiel wird aber wohl auch nicht so ganz passen. Im Original gibt eine Funktion des äußeren Interfaces bestimmt eine Instanz des inneren Interfaces zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459904</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 15 Jul 2015 13:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Thu, 16 Jul 2015 00:46:11 GMT]]></title><description><![CDATA[<p>rob#rt schrieb:</p>
<blockquote>
<p>Richtig. Es ging mir nur darum, warum man ein Interface in eine Klasse oder in ein weiteres Interface packen sollte. Ich war der Ansicht, dass gerade ein Interface für die Außenwelt bestimmt sei <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>
</blockquote>
<p>Ich sehe in dem &quot;für die Außenwelt bestimmt&quot; keinen Widerspruch, wenn das Interface <code>public</code> ist. Du hast doch selbst mit dem <code>Map.Entry</code> ein Beispiel für ein solches Interface gegeben, das ich persönlich ganz sinnvoll finde: Warum nicht zusammenpacken was zusammen gehört, wenn es z.B. keinen Sinn macht dass ein Map-Entry auch für sich alleine existiert, ohne dass jemals eine Map ins Spiel kommt?</p>
<p>Und wenn die <code>Map</code> schon ein Interface ist, dann kann es durchaus auch sinnvoll sein, dass der <code>Entry</code> ebenfalls eines ist, da in konkreten Maps die Einträge wahrscheinlich unterschiedliche interne Eigenschaften haben werden.</p>
<p>Ich sehe bei so einem <code>Map.Entry</code> eine ganz ähnliche Design-Motivation wie z.B. bei einigen eingebetteten Typen die man in den Container-Klassen der Standardbibliothek findet: bspw. <code>std::vector&lt;int&gt;::iterator</code> oder <code>std::map&lt;int, int&gt;::iterator</code> . Die Typen gehöhren logisch zu ihren jeweiligen Container-Typen, und sie können alle <code>iterator</code> heissen, weshalb man sie auch alle recht leicht finden kann, wenn man weiss wie der Container-Typ heisst. Ich denke bei deinem <code>IFoo::IBar</code> -Beispiel hat sich wahrscheilich jemand ähnliche Gedanken gemacht.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459947</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Thu, 16 Jul 2015 00:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Thu, 16 Jul 2015 04:03:33 GMT]]></title><description><![CDATA[<p>Ich könnt mir ne abstrakte Memberklasse in Sachen Strategy-Pattern verstellen vielleicht. Zusammen mit Merkels und Finnegans Leitspruch &quot;Warum nicht zusammenpacken was zusammen gehört&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459953</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jul 2015 04:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Thu, 16 Jul 2015 04:28:00 GMT]]></title><description><![CDATA[<p>Ja, vermutlich einfach ne Stilfrage.<br />
Namespace-Pollution vermeiden.<br />
Technischen Grund sehe ich da keinen wenn die inner class eine reine &quot;Interfaceklasse&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459958</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Jul 2015 04:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to inner&#x2F;nested interface on Thu, 16 Jul 2015 18:16:08 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>Warum nicht zusammenpacken was zusammen gehört</p>
</blockquote>
<p>Damit habt ihr sicher recht <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="🙂"
    /><br />
Ich dachte einfach, dem liegt irgendetwas besonderes zugrunde, wovon ich noch nichts gehört hab. Hab ich einfach so noch nicht gesehen.</p>
<p>Danke für die Gedanken zu dem Thema.<br />
Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460055</guid><dc:creator><![CDATA[rob#rt]]></dc:creator><pubDate>Thu, 16 Jul 2015 18:16:08 GMT</pubDate></item></channel></rss>