<?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[Rückgabe einer unbekannten Anzahl von Elementen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bräuchte mal ein paar Anregungen zu folgender Aufgabe (MFC-Hintergrund, allerdings ist das eigentliche Problem in diesem Forum besser aufgehoben, denke ich).</p>
<p>In meinem Programm wählt der User innerhalb eines Dialogs eine bestimmte Anzahl von Elementen aus, die aus Paaren eines CString und eines CBitmap* bestehen (Membervariablen der Dialogklasse). Ich will nun eine Methode innerhalb der Dialogklasse implementieren, die diese erst zur Laufzeit bekannte Anzahl von CString/CBitmap* Paaren zurückgibt bzw. zugänglich macht.</p>
<p>Folgende Varianten hatte ich dazu im Auge:<br />
1.)<br />
Ich übergebe der Methode (z.B.) einen std::vector&lt;pair&lt;CString, CBitmap*&gt;&gt;&amp; und fülle ihn innerhalb der Methode mit den entsprechenden Paaren. Also etwas in dieser Art:</p>
<pre><code class="language-cpp">void GetItems(std::vector&lt;std::pair&lt;Cstring, CBitmap*&gt;&gt;&amp; itemContainer) const;
</code></pre>
<p>2.)<br />
Ich erzeuge innerhalb der Methode einen solchen vector und gebe diesen zurück:</p>
<pre><code class="language-cpp">std::vector&lt;std::pair&lt;Cstring, CBitmap*&gt;&gt; GetItems() const;
</code></pre>
<p>3.) Ich mache die aufrufende Klasse zum friend der Dialogklasse und greife direkt auf deren Membervariablen zu.</p>
<p>Zu diesen Ideen würde ich gerne ein paar Meinungen hören.<br />
Welche Variante würdet ihr bevorzugen?<br />
Sind alle drei gleichermaßen unbrauchbar? Wie würdet ihr das dann machen?</p>
<p>Ich dachte, Variante 1 hat gegenüber 2 den Vorteil, dass keine Kopie des vectors erstellt werden muss.<br />
Variante 3 wäre sicher bequem, aber ich dachte, das sollte man vielleicht vermeiden, wenn es auch anders geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174761/rückgabe-einer-unbekannten-anzahl-von-elementen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 00:18:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174761.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Mar 2007 10:46:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabe einer unbekannten Anzahl von Elementen on Sat, 03 Mar 2007 11:33:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bräuchte mal ein paar Anregungen zu folgender Aufgabe (MFC-Hintergrund, allerdings ist das eigentliche Problem in diesem Forum besser aufgehoben, denke ich).</p>
<p>In meinem Programm wählt der User innerhalb eines Dialogs eine bestimmte Anzahl von Elementen aus, die aus Paaren eines CString und eines CBitmap* bestehen (Membervariablen der Dialogklasse). Ich will nun eine Methode innerhalb der Dialogklasse implementieren, die diese erst zur Laufzeit bekannte Anzahl von CString/CBitmap* Paaren zurückgibt bzw. zugänglich macht.</p>
<p>Folgende Varianten hatte ich dazu im Auge:<br />
1.)<br />
Ich übergebe der Methode (z.B.) einen std::vector&lt;pair&lt;CString, CBitmap*&gt;&gt;&amp; und fülle ihn innerhalb der Methode mit den entsprechenden Paaren. Also etwas in dieser Art:</p>
<pre><code class="language-cpp">void GetItems(std::vector&lt;std::pair&lt;Cstring, CBitmap*&gt;&gt;&amp; itemContainer) const;
</code></pre>
<p>2.)<br />
Ich erzeuge innerhalb der Methode einen solchen vector und gebe diesen zurück:</p>
<pre><code class="language-cpp">std::vector&lt;std::pair&lt;Cstring, CBitmap*&gt;&gt; GetItems() const;
</code></pre>
<p>3.) Ich mache die aufrufende Klasse zum friend der Dialogklasse und greife direkt auf deren Membervariablen zu.</p>
<p>Zu diesen Ideen würde ich gerne ein paar Meinungen hören.<br />
Welche Variante würdet ihr bevorzugen?<br />
Sind alle drei gleichermaßen unbrauchbar? Wie würdet ihr das dann machen?</p>
<p>Ich dachte, Variante 1 hat gegenüber 2 den Vorteil, dass keine Kopie des vectors erstellt werden muss.<br />
Variante 3 wäre sicher bequem, aber ich dachte, das sollte man vielleicht vermeiden, wenn es auch anders geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238438</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Sat, 03 Mar 2007 11:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe einer unbekannten Anzahl von Elementen on Sat, 03 Mar 2007 11:13:01 GMT]]></title><description><![CDATA[<p>Persönlich würde ich Variante 2 bevorzugen, weil sie am besten ausdrückt, was die Funktion tut. Variante 1 ist unter dem Gesichtspunkt der vermiedenen Kopie auch legitim - im Grunde geht es dabei ja nur um eine sprachtechnische Sache. Ob man dafür etwas Klarheit beim Interface opfern will, muss abgewogen werden. Übrigens lässt sich das Kopieren bei Variante 2 ebenfalls vermeiden:<br />
- bei der Konstruktion des Rückgabewertes verlassen wir uns auf NRVO<br />
- bei der Zuweisung/Intialisierung beim AUfrufer können wir auf swap ausweichen (nicht sehr schön, aber Move-Konstruktoren wird es erst in C++0x geben):</p>
<pre><code class="language-cpp">vector&lt;foo&gt; bar();
int main()
{
    vector&lt;foo&gt; x; bar().swap(x);
}
</code></pre>
<p>Variante 3 ist ein sehr böser Hack und an sich nicht diskussionswürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238448</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 03 Mar 2007 11:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe einer unbekannten Anzahl von Elementen on Sat, 03 Mar 2007 11:28:56 GMT]]></title><description><![CDATA[<p>Dann bin ich zunächst mal froh, dass ich nicht völlig auf dem Holzweg war! Ich werde also noch ein wenig abwägen und mich dann für eine der beiden ersten Varianten entscheiden <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>camper schrieb:</p>
<blockquote>
<p>Variante 3 ist ein sehr böser Hack und an sich nicht diskussionswürdig.</p>
</blockquote>
<p><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="🙂"
    /> Sehe ich ja ein, mir ist nur kein besserer dritter Vorschlag eingefallen...</p>
<p>Danke jedenfalls für die Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238453</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Sat, 03 Mar 2007 11:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe einer unbekannten Anzahl von Elementen on Sat, 03 Mar 2007 17:12:25 GMT]]></title><description><![CDATA[<p>Variante 4:</p>
<pre><code class="language-cpp">class Foo
{
public:
    template &lt;class OutputIterator&gt;
    void GetItems(OutputIterator outIt) const
    {
        // for all elements()
        {
            *outIt = ...
            outIt++;
        }
    }
    // ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238581</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 03 Mar 2007 17:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe einer unbekannten Anzahl von Elementen on Sat, 03 Mar 2007 17:52:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: sehr schön</p>
<p>Denkt man in dieser Richtung etwas weiter, stellt sich die Frage, ob nicht der Dialog selbst ein Iteratorinterface haben sollte. Dann erübrigt sich eine Funktion GetItems.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238598</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 03 Mar 2007 17:52:33 GMT</pubDate></item></channel></rss>