<?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[Key einer map an CTor des Values übergeben, geht das?]]></title><description><![CDATA[<p>Ich benutze eine Map um Buchstaben in UTF-32 zu speichern. Wenn ein Buchstabe noch nicht vorhanden ist, soll dieser geladen werden.</p>
<pre><code class="language-cpp">std::map&lt;unsigned long, Character&gt; characters;
characters[static_cast&lt;unsigned long&gt;('a')].Draw(); // Wenn a noch nicht geladen ist, erst laden, dann zeichnen
</code></pre>
<p>Das Problem dabei ist, dass die Character-Klasse ja wissen muss welchen Buchstaben sie laden soll und deswegen der CTor einen Parameter hat. Wie lässt sich das lösen ohne dabei den Umweg über eine Init-Funktion zu gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230410/key-einer-map-an-ctor-des-values-übergeben-geht-das</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 06:51:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230410.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Dec 2008 12:49:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Fri, 26 Dec 2008 12:49:42 GMT]]></title><description><![CDATA[<p>Ich benutze eine Map um Buchstaben in UTF-32 zu speichern. Wenn ein Buchstabe noch nicht vorhanden ist, soll dieser geladen werden.</p>
<pre><code class="language-cpp">std::map&lt;unsigned long, Character&gt; characters;
characters[static_cast&lt;unsigned long&gt;('a')].Draw(); // Wenn a noch nicht geladen ist, erst laden, dann zeichnen
</code></pre>
<p>Das Problem dabei ist, dass die Character-Klasse ja wissen muss welchen Buchstaben sie laden soll und deswegen der CTor einen Parameter hat. Wie lässt sich das lösen ohne dabei den Umweg über eine Init-Funktion zu gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635748</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 26 Dec 2008 12:49:42 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Fri, 26 Dec 2008 13:25:51 GMT]]></title><description><![CDATA[<p>Eine Möglichkeit wäre, dass du dir eine Klasse (z.B.) UTF32Map definierst, die von std::map&lt;unsigned long, Character&gt; erbt. Darin redefinierst du deinen Zugriffs-Operator, operator[].<br />
In diesem kannst du nachschauen, ob der map bereits definiert ist, und wenn nicht kannst du einen neuen erstellen und einfügen.</p>
<p>Ansonsten kannst du auch eine statische Zugriffsmethode erstellen, die dir einen Character zurückliefert, und entsprechend bei Nichtexistenz erst einen Character erzeugt und einfügt:<br />
z.B.</p>
<pre><code>static Character getCharacter( std::map&lt;unsigned long, Character&gt;&amp; m, unsigned long k )
</code></pre>
<p>Grüße<br />
Franz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1635758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1635758</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Fri, 26 Dec 2008 13:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Sat, 27 Dec 2008 14:14:06 GMT]]></title><description><![CDATA[<p>Okay danke, dann werd ich das so machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636130</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 27 Dec 2008 14:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Sat, 27 Dec 2008 14:47:35 GMT]]></title><description><![CDATA[<p>franz schrieb:</p>
<blockquote>
<p>Eine Möglichkeit wäre, dass du dir eine Klasse (z.B.) UTF32Map definierst, die von std::map&lt;unsigned long, Character&gt; erbt. Darin redefinierst du deinen Zugriffs-Operator, operator[].<br />
In diesem kannst du nachschauen, ob der map bereits definiert ist, und wenn nicht kannst du einen neuen erstellen und einfügen.</p>
</blockquote>
<p>Von den Standardbibliothek Containern, sollte man nicht erben, da sie nicht dazu gedacht sind. Es ist jedenfalls ziemlich fehleranfällig.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6950">@joomoo</a>,<br />
Es gibt dafür eine ziemlich einfache Methode von <code>std::map</code> :<br />
<a href="http://www.cplusplus.com/reference/stl/map/insert.html" rel="nofollow">http://www.cplusplus.com/reference/stl/map/insert.html</a></p>
<pre><code class="language-cpp">std::map&lt;unsigned long, Character&gt; characters;
characters.insert(
  std::make_pair(
    static_cast&lt;unsigned long&gt;('a'),
    Character('a')
    )
  ).first-&gt;Draw();
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636145</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 27 Dec 2008 14:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Sat, 27 Dec 2008 17:30:17 GMT]]></title><description><![CDATA[<p>Den <code>static_cast&lt;unsigned long&gt;</code> kann man sich hier sparen, bei integralen Typen existiert eine implizite Konversion.</p>
<p>Zudem finde ich das Folgende nicht sehr schön, ich persönlich ziehe eine Aufteilung in mehrere Anweisungen vor.</p>
<pre><code class="language-cpp">characters.insert(
  std::make_pair(
    static_cast&lt;unsigned long&gt;('a'),
    Character('a')
    )
  ).first-&gt;Draw();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1636209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636209</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Dec 2008 17:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 13:39:57 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Es gibt dafür eine ziemlich einfache Methode von <code>std::map</code> :<br />
<a href="http://www.cplusplus.com/reference/stl/map/insert.html" rel="nofollow">http://www.cplusplus.com/reference/stl/map/insert.html</a></p>
<pre><code class="language-cpp">std::map&lt;unsigned long, Character&gt; characters;
characters.insert(
  std::make_pair(
    static_cast&lt;unsigned long&gt;('a'),
    Character('a')
    )
  ).first-&gt;Draw();
</code></pre>
<p>Grüssli</p>
</blockquote>
<p>Das Problem hierbei ist, dass jedes mal der Konstruktor aufgerufen wird, oder nicht? Das ist in meinem Fall ziemlich ungünstig, da dann jeder Buchstabe nochmal für ein temporäres Objekt geladen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637263</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 30 Dec 2008 13:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 14:16:03 GMT]]></title><description><![CDATA[<p>vielleicht suchst du sowas?</p>
<pre><code class="language-cpp">//braucht der benutzer gar nicht zu kennen
class Character
{//TODO: da fehlt noch was
};

//braucht der benutzer gar nicht zu kennen
Charcter* LoadCharacter(unsigned long ch)
{
   ifstream in(...
   Character* pch=new//TODO: da fehlt noch was
   return ch;
}

//braucht der benutzer gar nicht zu kennen
std::set&lt;unsigned long,Character*&gt; theCharacters;

//braucht der benutzer gar nicht zu kennen
Charcter* GetCharacter(unsigned long ch)
{
   Character* pch=theCharacters[ch];
   if(pch==0)
      pch=LoadCharacter(ch);
   return ch;
}

//das hier mag der benutzer
void DrawCharacter(unsigned long ch,int x,int y)
{
   Character* pch=GetCharacter[ch];
   DrawCharacter(ch,x,y);
}

//braucht der benutzer gar nicht zu kennen
void DrawCharacter(Character* pch,int x,int y)
{
   //TODO
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1637277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637277</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 14:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 14:59:57 GMT]]></title><description><![CDATA[<p>Okay. Und das ganze jetzt noch mit SmartPointern, oder ist das Overkill?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637299</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 30 Dec 2008 14:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 15:40:59 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Okay. Und das ganze jetzt noch mit SmartPointern, oder ist das Overkill?</p>
</blockquote>
<p>wir können dich eh nicht davon abhalten, mal ganz heftig mit SmartPointern zu spielen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637338</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 15:44:15 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>joomoo schrieb:</p>
<blockquote>
<p>Okay. Und das ganze jetzt noch mit SmartPointern, oder ist das Overkill?</p>
</blockquote>
<p>wir können dich eh nicht davon abhalten, mal ganz heftig mit SmartPointern zu spielen, oder?</p>
</blockquote>
<p>Doch, indem ihr mir sagt, warum ich es nicht machen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637343</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 15:51:01 GMT]]></title><description><![CDATA[<p>wenn der benutzer selber LoadCharacter aufrufen darf, sind smart pointers eine überlegung wert. der benutzer ist nämlich schusselig und vergißt, den speicher wieder freizugeben.<br />
wenn der benutzer die ganzen &quot;//braucht der benutzer gar nicht zu kennen&quot; nicht kennt, sind smart pointers totaler overkill.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637346</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Key einer map an CTor des Values übergeben, geht das? on Tue, 30 Dec 2008 15:54:05 GMT]]></title><description><![CDATA[<p>Ok, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637349</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:54:05 GMT</pubDate></item></channel></rss>