<?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[Fat interface mit Delegaten vermeiden]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe eine Klasse</p>
<pre><code class="language-cpp">class C
{
    ...
public:
    void a_1();
     ...
    void a_m();

    void b_1();
    ...
    void b_n();
};
</code></pre>
<p>dessen Interface mir zu fett ist. Ich würde dem nun gerne begegnen, indem ich b_1,...,b_n per Delegaten auslagere, also</p>
<pre><code class="language-cpp">class B
{
    ...
public:
    void b_1();
    ...
    void b_n();
};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">class C
{
    B* b;
    ...
public:
    void a_1();
     ...
    void a_m();

    void b_1() { b-&gt;b_1(); }
    ...
    void b_n() { b-&gt;b_n(); }
};
</code></pre>
<p>Irgendwie ist die Klasse C so aber nicht wirklich übersichtlicher geworden (zumindest der Header, der Sourcecode wahrscheinlich schon).</p>
<p>Von daher die Frage: Gibt es eine andere Möglichkeit mittels Delegaten das Interface von C übersichtlicher zu bekommen? So ist es ja genau dasselbe wie vorher, wenn man die Definition von b_1,...,b_n noch in den Source-Code packt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/228328/fat-interface-mit-delegaten-vermeiden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 18:40:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/228328.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Nov 2008 19:52:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Wed, 26 Nov 2008 19:52:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe eine Klasse</p>
<pre><code class="language-cpp">class C
{
    ...
public:
    void a_1();
     ...
    void a_m();

    void b_1();
    ...
    void b_n();
};
</code></pre>
<p>dessen Interface mir zu fett ist. Ich würde dem nun gerne begegnen, indem ich b_1,...,b_n per Delegaten auslagere, also</p>
<pre><code class="language-cpp">class B
{
    ...
public:
    void b_1();
    ...
    void b_n();
};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">class C
{
    B* b;
    ...
public:
    void a_1();
     ...
    void a_m();

    void b_1() { b-&gt;b_1(); }
    ...
    void b_n() { b-&gt;b_n(); }
};
</code></pre>
<p>Irgendwie ist die Klasse C so aber nicht wirklich übersichtlicher geworden (zumindest der Header, der Sourcecode wahrscheinlich schon).</p>
<p>Von daher die Frage: Gibt es eine andere Möglichkeit mittels Delegaten das Interface von C übersichtlicher zu bekommen? So ist es ja genau dasselbe wie vorher, wenn man die Definition von b_1,...,b_n noch in den Source-Code packt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1621398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1621398</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 26 Nov 2008 19:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Wed, 26 Nov 2008 19:54:18 GMT]]></title><description><![CDATA[<p>Ich seh denn Sinn dahinter nicht. Wenn dir die CPP-Datei zu gross wird, kannst du diese ja aufspalten.</p>
<p>Ansonsten ist vielleicht das Pimpl-Idiom etwas...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1621399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1621399</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 26 Nov 2008 19:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Wed, 26 Nov 2008 20:28:25 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ansonsten ist vielleicht das Pimpl-Idiom etwas...</p>
</blockquote>
<p>Für das Interface? Kaum.</p>
<p>Du könntest C von B erben lassen - wenn du die Konsequenzen überblickst, und wenn diese Beziehung sinnvoll ist. Ansonsten könntest du in C eine Memberfunktion einführen, die einen Zeiger auf ein B-Objekt zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1621423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1621423</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 26 Nov 2008 20:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Wed, 26 Nov 2008 20:55:00 GMT]]></title><description><![CDATA[<p>den sinn verstehe ich zwar auch nicht so ganz, aber so weit ich dich verstanden habe, wäre vererbung vll das richtige:</p>
<pre><code class="language-cpp">class B
{
private:
 int n;
public:
 int GetN() const {return n;}
 void SetN(int _n) {n = _n;}
};

class C : public B
{
 public:
  int GetN_and_one() const {return GetN() + 1;}
};

int main()
{
 C test;
 test.getN();
 test.getN_and_one();
}
</code></pre>
<p>oder hab ich dich falsch verstanden?</p>
<p>bb</p>
<p>edit: oh - hatte vergessen, den tab zu aktualisieren, bevor ich geschrieben hab... sry &gt;&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1621441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1621441</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 26 Nov 2008 20:55:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Thu, 27 Nov 2008 17:32:35 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Du könntest C von B erben lassen - wenn du die Konsequenzen überblickst, und wenn diese Beziehung sinnvoll ist. Ansonsten könntest du in C eine Memberfunktion einführen, die einen Zeiger auf ein B-Objekt zurückgibt.</p>
</blockquote>
<p>Mir ging es darum, ob es neben diesen beiden Möglichkeiten noch eine andere gibt. Vererbung würde ich lieber vermeiden (da die Klassenhierarchie in dem Fall, den ich vor Augen habe, schon kompliziert genug ist). Und ein Zeiger auf ein B-Objekt hat ja den Nachteil, dass ich dann</p>
<pre><code class="language-cpp">C c;
c.b()-&gt;b_1();
</code></pre>
<p>statt</p>
<pre><code class="language-cpp">C c;
c.b_1();
</code></pre>
<p>schreiben müsste (wobei b() den Zeiger auf das B-Objekt liefere). Ich dachte an ein Konstrukt, dass mir erlaubt alle member functions eines Delegaten B der Klasse C zu member functions von C zu machen, ohne dass ich die einzeln ins Interface von C schreiben muss, also</p>
<pre><code class="language-cpp">class C
{
    B* b;
    ...
public:
    void a_1();
     ...
    void a_m();

    use interface of B;    // die Zeile nur so, dass C++ das versteht
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1622000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622000</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Thu, 27 Nov 2008 17:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Fri, 28 Nov 2008 06:50:47 GMT]]></title><description><![CDATA[<p>Das geht so, wie du das willst lediglich durch Vererbung.</p>
<p>Ansonsten musst du halt b public machen, dann geht das:</p>
<pre><code class="language-cpp">C c;
c.b-&gt;b_1();
</code></pre>
<p>oder wenn eine Referenz speicherst:</p>
<pre><code class="language-cpp">C c;
c.b.b_1();
</code></pre>
<p>Das ist aber nur zu empfehlen, wenn du wirklich keine Vor/Nachbedingugen hast. Ansonsten kannst du dir ja eine Schnittstelle für B basteln, der dir die Aufrufe wrappt und du so im Nachhinein immernoch relativ leicht eine Vor/Nachbedingung einfügen kannst. (Kommt dann auf das gleiche raus, wie alles in C zu wrappen, ausser, dass es ein wenig aufgeräumter ist.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622256</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 28 Nov 2008 06:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Fri, 28 Nov 2008 07:42:55 GMT]]></title><description><![CDATA[<p>ich schliesse mich dem vorredner an.<br />
wobei, damit man nicht andauernd c.b schreiben muss kann man das auch so schreiben</p>
<pre><code class="language-cpp">B&amp; b = c.b();

b.b_1();
b.b_2();
b.b_n();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1622266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622266</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Fri, 28 Nov 2008 07:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Fri, 28 Nov 2008 17:59:48 GMT]]></title><description><![CDATA[<p>Was soll &quot;Delegaten&quot; für ein Wort sein? Vielleicht Plural (bzw. 2. Fall Singular) von &quot;Delegat&quot;? Wenn ja, was soll &quot;Delegat&quot; für ein Wort sein?</p>
<p>Meinst du vielleicht &quot;der Delegierte&quot;? Oder meinst du das englische &quot;delegate&quot; (der Abgeordnete/Abgesandte/Bevollmächtigte/...)? Oder &quot;delegieren&quot; (ich delegiere, du delegierst, der Vorgang des Delegierens)?</p>
<p>Es ist nicht meine Absicht dich zurechtzuweisen oder zu beleidigen, ich denke nur dass du genauer verstanden wirst wenn du Wörter verwendest die es a) auch gibt und die b) gebräuchlich sind bzw. allgemein verstanden werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622588</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 28 Nov 2008 17:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sat, 29 Nov 2008 00:40:11 GMT]]></title><description><![CDATA[<p>Also, dein Interface ist fett. Egal wie du es nun zerbröckelst, im Grunde willst du es, wie du sagst ja doch zusammenbehalten. Evtl. kannst du dann ja nach einer halben Seite vom Interface einfach jede Menge Leerzeilen einbauen. Damit hast du das eigentlich zusammengehörige auch sehr schon getrennt und total übersichtlich.</p>
<p>Oder aber du gehst zum Reißbrett und schaust ob wirklich alles Teil des Klasseninterfaces sein muss, oder ob nicht einiges sinnvoll in normale Funktionen ausgelagert werden kann, oder ob nicht doch eine Komposition das Richtige ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622706</guid><dc:creator><![CDATA[Deci]]></dc:creator><pubDate>Sat, 29 Nov 2008 00:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sun, 30 Nov 2008 11:03:32 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Was soll &quot;Delegaten&quot; für ein Wort sein? Vielleicht Plural (bzw. 2. Fall Singular) von &quot;Delegat&quot;? Wenn ja, was soll &quot;Delegat&quot; für ein Wort sein?</p>
<p>Meinst du vielleicht &quot;der Delegierte&quot;? Oder meinst du das englische &quot;delegate&quot; (der Abgeordnete/Abgesandte/Bevollmächtigte/...)? Oder &quot;delegieren&quot; (ich delegiere, du delegierst, der Vorgang des Delegierens)?</p>
<p>Es ist nicht meine Absicht dich zurechtzuweisen oder zu beleidigen, ich denke nur dass du genauer verstanden wirst wenn du Wörter verwendest die es a) auch gibt und die b) gebräuchlich sind bzw. allgemein verstanden werden.</p>
</blockquote>
<p>Hiermit soll gemeint sein, was in &quot;Design Patterns&quot; auf S. 20 unter &quot;Delegation&quot; beschrieben ist: &quot;... a receiving object delegates operations to its delegate&quot;. Delegat ist meine Eindeutschung von &quot;delegate&quot;. Falls es eine andere Übersetzung gibt, lasst mich es wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623235</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Sun, 30 Nov 2008 11:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sun, 30 Nov 2008 14:33:30 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Hiermit soll gemeint sein, was in &quot;Design Patterns&quot; auf S. 20 unter &quot;Delegation&quot; beschrieben ist: &quot;... a receiving object delegates operations to its delegate&quot;. Delegat ist meine Eindeutschung von &quot;delegate&quot;. Falls es eine andere Übersetzung gibt, lasst mich es wissen.</p>
</blockquote>
<p><a href="http://dict.leo.org/ende?lang=de&amp;search=delegate" rel="nofollow">http://dict.leo.org/ende?lang=de&amp;search=delegate</a><br />
<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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623324</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 30 Nov 2008 14:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Mon, 01 Dec 2008 06:00:49 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Was soll &quot;Delegaten&quot; für ein Wort sein? Vielleicht Plural (bzw. 2. Fall Singular) von &quot;Delegat&quot;? Wenn ja, was soll &quot;Delegat&quot; für ein Wort sein?</p>
<p>Meinst du vielleicht &quot;der Delegierte&quot;? Oder meinst du das englische &quot;delegate&quot; (der Abgeordnete/Abgesandte/Bevollmächtigte/...)? Oder &quot;delegieren&quot; (ich delegiere, du delegierst, der Vorgang des Delegierens)?</p>
<p>Es ist nicht meine Absicht dich zurechtzuweisen oder zu beleidigen, ich denke nur dass du genauer verstanden wirst wenn du Wörter verwendest die es a) auch gibt und die b) gebräuchlich sind bzw. allgemein verstanden werden.</p>
</blockquote>
<p>Hiermit soll gemeint sein, was in &quot;Design Patterns&quot; auf S. 20 unter &quot;Delegation&quot; beschrieben ist: &quot;... a receiving object delegates operations to its delegate&quot;. Delegat ist meine Eindeutschung von &quot;delegate&quot;. Falls es eine andere Übersetzung gibt, lasst mich es wissen.</p>
</blockquote>
<p>Übersetzung des englischen Worts ist ja nicht schwer zu finden. Übersetzung des Fachausdruckes kann ich dir keine anbieten. Verwende doch einfach das englische Wort, so wie es unter Programmierern üblich ist. Man sagt auch &quot;callback&quot; oder &quot;exception&quot; - solche Ausdrücke werden selten übersetzt. Wenn du eine Übersetzung kennst die breitflächig verstanden wird kannst du sie gerne verwenden (auch wenn ich es persönlich nicht tun würde). Aber auf Zwang einfach alles ins Deutsche zu übersetzen oder - noch schlimmer - &quot;einzudeutschen&quot; indem man ein nicht-deutsches Wort deutsch dekliniert... finde ich nicht gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623597</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 01 Dec 2008 06:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Tue, 09 Dec 2008 13:45:32 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Ich dachte an ein Konstrukt, dass mir erlaubt alle member functions eines Delegaten B der Klasse C zu member functions von C zu machen, ohne dass ich die einzeln ins Interface von C schreiben muss, also</p>
<pre><code class="language-cpp">class C
{
    B* b;
    ...
public:
    void a_1();
     ...
    void a_m();

    use interface of B;    // die Zeile nur so, dass C++ das versteht
};
</code></pre>
</blockquote>
<p>So etwas gibt es, soweit ich weiß, nur in Delphi und nur für Interfaces (<a href="http://weblogs.asp.net/fmarguerie/archive/2003/04/07/4983.aspx" rel="nofollow">implements</a>). In C++ kannst du aber, wenn du nicht dynamic_cast&lt;&gt; benutzt, sondern das dynamische Dispatching selbst implementierst (z.B. mit QueryInterface()), etwas ähnliches erreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627631</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Tue, 09 Dec 2008 13:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sun, 14 Dec 2008 10:06:04 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>In C++ kannst du aber, wenn du nicht dynamic_cast&lt;&gt; benutzt, sondern das dynamische Dispatching selbst implementierst (z.B. mit QueryInterface()), etwas ähnliches erreichen.</p>
</blockquote>
<p>Kennt jemand eine Website, auf der erklärt wird, was QueryInterface ist und wie es funktioniert? Per Google habe ich nichts erhellendes finden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630239</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Sun, 14 Dec 2008 10:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sun, 14 Dec 2008 12:58:28 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>audacia schrieb:</p>
<blockquote>
<p>In C++ kannst du aber, wenn du nicht dynamic_cast&lt;&gt; benutzt, sondern das dynamische Dispatching selbst implementierst (z.B. mit QueryInterface()), etwas ähnliches erreichen.</p>
</blockquote>
<p>Kennt jemand eine Website, auf der erklärt wird, was QueryInterface ist und wie es funktioniert? Per Google habe ich nichts erhellendes finden können.</p>
</blockquote>
<p><a href="http://msdn.microsoft.com/en-us/library/ms682521(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms682521(VS.85).aspx</a></p>
<p>Soweit ich das aber sehe, ging es vorher aber eher um dynamisches Dispatching:<br />
<a href="http://en.wikipedia.org/wiki/Dynamic_dispatch" rel="nofollow">http://en.wikipedia.org/wiki/Dynamic_dispatch</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630300</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 14 Dec 2008 12:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Fat interface mit Delegaten vermeiden on Sun, 14 Dec 2008 12:59:34 GMT]]></title><description><![CDATA[<p>Abends nicht zuviel essen und immer aktiv sein, dann wird man nicht zu fett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1630302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1630302</guid><dc:creator><![CDATA[wichtüg]]></dc:creator><pubDate>Sun, 14 Dec 2008 12:59:34 GMT</pubDate></item></channel></rss>