<?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[Polymere map]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>In meinem Framework muss ich eine große Anzahl an Parametern übergeben. Genauer gesagt habe ich eine Klasse, welche sehr viele Parameter besitzt und erstelle von dieser Klasse sehr viele Objekte, welche sich in ihren Parametern unterscheiden.</p>
<p>Dies möchte ich lösen, indem ich der Klasse eine Map mit den verschiedenen Parametern übergebe, mit einem string als key (auch um den Code leserlich und verständlich zu halten, um zu wissen welcher Parameter abgefragt wird)</p>
<p>Einfach gemacht, ich löse das ganze temporär mit strings:</p>
<pre><code class="language-cpp">std::map&lt;std::string, std::string&gt; mymap; 
  mymap[&quot;myInteger&quot;] = &quot;1&quot;;
  mymap[&quot;myString&quot;]  = &quot;foo&quot;;
  mymap[&quot;myDouble&quot;]  = &quot;1.0&quot;;
  mymap[&quot;myBool&quot;]    = &quot;false&quot;;
</code></pre>
<p>welche ich dann in der Klasse geziehlt auslese</p>
<pre><code class="language-cpp">int myInteger        = atoi(mymap[&quot;myInteger&quot;].c_str());
  std::string myString = mymap[&quot;myString&quot;];
  double myDouble      = atof(mymap[&quot;myDouble&quot;].c_str());
  bool myBool          = false;
  if(mymap[&quot;myBool&quot;] == &quot;true&quot;) myBool = true;
</code></pre>
<p>Das ganze funktioniert natürlich, ist aber nicht sonderlich elegant. Die Frage ist nun also, wie ich eine polymere Map erstellen kann, in der ich direkt verschiedene Typen speichern kann, ohne sie dann danach mittels des strings zu setzen. Also sowas wie:</p>
<pre><code class="language-cpp">std::map&lt;std::string, ANYTYPE&gt; mymap; 
  mymap[&quot;myInteger&quot;] = 1;
  mymap[&quot;myString&quot;]  = &quot;foo&quot;;
  mymap[&quot;myDouble&quot;]  = 1.0;
  mymap[&quot;myBool&quot;]    = false;
</code></pre>
<p>welche ich dann in der Klasse geziehlt auslese</p>
<pre><code class="language-cpp">int myInteger        = mymap[&quot;myInteger&quot;];
  std::string myString = mymap[&quot;myString&quot;];
  double myDouble      = mymap[&quot;myDouble&quot;];
  bool myBool          = mymap[&quot;myBool&quot;];
</code></pre>
<p>Ich kenne schon den Ansatz mit einer Basisklasse, von der ich einige Klassen ableite und dann letztlich in die Map Objekte der Basis Klasse einfüge, und somit die verschiedenen Typen in einer Map storen kann. Aber ich möchte hier nur standardklassen verwenden (wie gezeigt int, string, double, bool).</p>
<p>Ist das irgendwie möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299677/polymere-map</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 03:12:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299677.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Feb 2012 08:22:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymere map on Thu, 16 Feb 2012 08:26:40 GMT]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>In meinem Framework muss ich eine große Anzahl an Parametern übergeben. Genauer gesagt habe ich eine Klasse, welche sehr viele Parameter besitzt und erstelle von dieser Klasse sehr viele Objekte, welche sich in ihren Parametern unterscheiden.</p>
<p>Dies möchte ich lösen, indem ich der Klasse eine Map mit den verschiedenen Parametern übergebe, mit einem string als key (auch um den Code leserlich und verständlich zu halten, um zu wissen welcher Parameter abgefragt wird)</p>
<p>Einfach gemacht, ich löse das ganze temporär mit strings:</p>
<pre><code class="language-cpp">std::map&lt;std::string, std::string&gt; mymap; 
  mymap[&quot;myInteger&quot;] = &quot;1&quot;;
  mymap[&quot;myString&quot;]  = &quot;foo&quot;;
  mymap[&quot;myDouble&quot;]  = &quot;1.0&quot;;
  mymap[&quot;myBool&quot;]    = &quot;false&quot;;
</code></pre>
<p>welche ich dann in der Klasse geziehlt auslese</p>
<pre><code class="language-cpp">int myInteger        = atoi(mymap[&quot;myInteger&quot;].c_str());
  std::string myString = mymap[&quot;myString&quot;];
  double myDouble      = atof(mymap[&quot;myDouble&quot;].c_str());
  bool myBool          = false;
  if(mymap[&quot;myBool&quot;] == &quot;true&quot;) myBool = true;
</code></pre>
<p>Das ganze funktioniert natürlich, ist aber nicht sonderlich elegant. Die Frage ist nun also, wie ich eine polymere Map erstellen kann, in der ich direkt verschiedene Typen speichern kann, ohne sie dann danach mittels des strings zu setzen. Also sowas wie:</p>
<pre><code class="language-cpp">std::map&lt;std::string, ANYTYPE&gt; mymap; 
  mymap[&quot;myInteger&quot;] = 1;
  mymap[&quot;myString&quot;]  = &quot;foo&quot;;
  mymap[&quot;myDouble&quot;]  = 1.0;
  mymap[&quot;myBool&quot;]    = false;
</code></pre>
<p>welche ich dann in der Klasse geziehlt auslese</p>
<pre><code class="language-cpp">int myInteger        = mymap[&quot;myInteger&quot;];
  std::string myString = mymap[&quot;myString&quot;];
  double myDouble      = mymap[&quot;myDouble&quot;];
  bool myBool          = mymap[&quot;myBool&quot;];
</code></pre>
<p>Ich kenne schon den Ansatz mit einer Basisklasse, von der ich einige Klassen ableite und dann letztlich in die Map Objekte der Basis Klasse einfüge, und somit die verschiedenen Typen in einer Map storen kann. Aber ich möchte hier nur standardklassen verwenden (wie gezeigt int, string, double, bool).</p>
<p>Ist das irgendwie möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181768</guid><dc:creator><![CDATA[HeXor]]></dc:creator><pubDate>Thu, 16 Feb 2012 08:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to Polymere map on Thu, 16 Feb 2012 08:28:09 GMT]]></title><description><![CDATA[<p>Im Standard gibts es dafür nichts. Mit boost::variant kannst du sowas machen. <a href="http://www.boost.org/doc/libs/1_48_0/doc/html/variant.html" rel="nofollow">http://www.boost.org/doc/libs/1_48_0/doc/html/variant.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181771</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 16 Feb 2012 08:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Polymere map on Thu, 16 Feb 2012 08:33:24 GMT]]></title><description><![CDATA[<p>Mir kam gerade noch eine andere Idee. Im Prinzip könnte man die Map ja auch auf eine andere Klasse übertragen. Sowas wie</p>
<pre><code class="language-cpp">class MyParameters {

public:

  int myInteger;
  std::string myString;
  double myDouble;
  bool myBool;
};

MyParameters::MyParameters() {
  myInteger = 1;
  myString = &quot;foo&quot;;
  myDouble = 1.0;
  myBool = true;
}
</code></pre>
<p>Und dann dieses myParamters Objekt übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2181774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2181774</guid><dc:creator><![CDATA[HeXor]]></dc:creator><pubDate>Thu, 16 Feb 2012 08:33:24 GMT</pubDate></item></channel></rss>