<?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[map mit unterschiedlichen type]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich hätte gern eine map, in welcher ich per string key verschiedenen typen gemeinsam speichern kann. also so im dem sinne:</p>
<pre><code>A a;
B b;
std::map&lt;std::string, ???&gt; storage;

storage.at(&quot;a&quot;, a);
storage.at(&quot;b&quot;, b);
</code></pre>
<p>bisher habe ich hinweise auf boos.any bzw. boost.variant gefunden. bin mir da aber nicht sicher. gibt es in c++11 was feines??? erfahrungen? meinungen???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323699/map-mit-unterschiedlichen-type</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 20:04:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323699.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Feb 2014 11:23:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 11:23:03 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich hätte gern eine map, in welcher ich per string key verschiedenen typen gemeinsam speichern kann. also so im dem sinne:</p>
<pre><code>A a;
B b;
std::map&lt;std::string, ???&gt; storage;

storage.at(&quot;a&quot;, a);
storage.at(&quot;b&quot;, b);
</code></pre>
<p>bisher habe ich hinweise auf boos.any bzw. boost.variant gefunden. bin mir da aber nicht sicher. gibt es in c++11 was feines??? erfahrungen? meinungen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382672</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 11:23:03 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 11:26:26 GMT]]></title><description><![CDATA[<p>bzw. ist die verwendungen des &quot;property patterns&quot; besser, als ne map? aus den boost examples:</p>
<pre><code>struct property
{
    property();
    property(const std::string &amp;, const boost::any &amp;);

    std::string name;
    boost::any value;
};

typedef std::list&lt;property&gt; properties;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2382674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382674</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 11:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 11:37:29 GMT]]></title><description><![CDATA[<p>Was hast du denn vor?</p>
<p>Erstmal hört sich das komisch an, wenn du komplett unterschiedliche Typen in einer Datenstruktur zusammenfassen willst und zeugt von nicht durchdachtem Design.<br />
Umgehen kann man das z.B. per gemeinsamer Basisklasse und Polymorphie.</p>
<p>Klar, es gibt auch Anwendungsfelder für boost::any und dergleichen.</p>
<p>Daher, erklär mal, was du vorhast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382676</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 11 Feb 2014 11:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 12:45:18 GMT]]></title><description><![CDATA[<p>hey,</p>
<p>also ich habe diverse timer, mit sub- und zwischenklassen. die unterscheiden sich oft nur durch wenige details. vorallem werden sie aus semantischen gründen genutzt. nun ist die idee, dass man die basisklasse timer um so eine property-list. die einzelnen timer würden dann nur noch über die getter und setter auf die liste zugreifen. dadurch erhoffe ich mir ne einfachere struktur, gerade für member die ähnlich sind und dann aber wieder doch nicht. auch das ganze ein wenig leichtgewichtiger in der nutzung. verständlicher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382683</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 12:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 12:49:11 GMT]]></title><description><![CDATA[<p>Wie gesagt, das hört sich eher nach Vererbung mit Polymorphie und sowas an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382684</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 11 Feb 2014 12:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 12:56:17 GMT]]></title><description><![CDATA[<p>dann anders gefragt,</p>
<p>ihr habt sagen wir acht timer, welche aus logisch unterschiedlichen modulen stammen. diese unterscheiden sich semantisch, aber aber kreuz die quere ähnliche abhängigkeiten. vererbung zwischen den modulen geht nicht, da nicht immer alle da sind, und es auch nen doofes design ist. alles in die oberklassen schieben ist doof, weil diese unnötig fett werden. zwischenklassen einführen führt zu quasi identischen klassen, in unterschiedlichen modulen.</p>
<p>mh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382685</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 12:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 13:23:29 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass storage[&quot;bla&quot;] nicht weiß was es zurückgeben soll. Könnte ja jeder der 8 Timer sein. Da gibt es verschiedene Lösungen:<br />
-Benutze eine map pro Timertyp<br />
-Benutze eine map mit void * und finde dann selbst raus mit welchem Timertyp du es zu tun hast<br />
-Schreibe ein struct UnitedTimer, der intern einen void * auf den Timer und eine ID für den Timertyp hält und getTime und setTime anbietet, was je nach Timertyp anders implementiert ist, und dann einfach map&lt;string, UnitedTimer&gt;</p>
<p>Interessiert es dich überhaupt welche Art von Timer du gerade hast oder willst du nur die Zeit wissen?</p>
<p>Die korrekte Lösung ist natürlich die offensichtliche: Schmeiße 7 der 8 Timertypen weg und benutze nur noch einen. Aber das macht ja Arbeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382686</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Tue, 11 Feb 2014 13:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 13:40:00 GMT]]></title><description><![CDATA[<p>ne, da missverstehen wir uns ein wenig.</p>
<p>[/code]<br />
basistimer:</p>
<p>...<br />
protected:<br />
map&lt;string, any&gt; storage;</p>
<p>subtimer b:</p>
<p>getProtery1(){</p>
<p>return any_cast&lt;TYPE_OF_PROPERTY_1&gt;(storage[&quot;PROPERTY_1&quot;]);<br />
}</p>
<p>setPorperty1(TYPE_OF_PROPERTY_1 prop){<br />
storage[&quot;PROPERTY_1&quot;]= prop;<br />
}<br />
[/code]</p>
<p>Die timer überwachen in einem protokoll verschiedene aktionen (connection timeout, retransmission, leaf, join, ....). je nach submobdul halt. da nicht immer alle module da sind, kann ich auch nicht einfach timer raus oder rein nehmen.</p>
<p>im moment habe ich eine lange kette von vererbung etc. dabei kommt es aber vor, dass in bestimmten contexten die eigenschaften nicht notwendig sind beim timer, in anderen schon. heißt, er schleppt im worst case eine latte von ungenutzten parametern mit. zum beispiel eine anzahl von listen. dies will ich halt mir sparen, weil es auch immer schwieriger wird, durchzusehen, wo wann welche eigenschaft genutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382688</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 13:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 13:54:42 GMT]]></title><description><![CDATA[<p>Mal anders gefragt: Was haben all die Timer denn gemeinsam? Weswegen willst du die alle in eine gemeinsame Map packen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382689</guid><dc:creator><![CDATA[nman]]></dc:creator><pubDate>Tue, 11 Feb 2014 13:54:42 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:12:46 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<p>dann anders gefragt,</p>
<p>ihr habt sagen wir acht timer, welche aus logisch unterschiedlichen modulen stammen. diese unterscheiden sich semantisch, aber aber kreuz die quere ähnliche abhängigkeiten. vererbung zwischen den modulen geht nicht, da nicht immer alle da sind, und es auch nen doofes design ist. alles in die oberklassen schieben ist doof, weil diese unnötig fett werden. zwischenklassen einführen führt zu quasi identischen klassen, in unterschiedlichen modulen.</p>
<p>mh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Also brauchste nur 8 Namen, das sind 8 Variablen/Zeiger/Referenzen/Zugriffsfunktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382691</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:16:00 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<p>dann anders gefragt,</p>
<p>ihr habt sagen wir acht timer, welche aus logisch unterschiedlichen modulen stammen. diese unterscheiden sich semantisch, aber aber kreuz die quere ähnliche abhängigkeiten. vererbung zwischen den modulen geht nicht, da nicht immer alle da sind, und es auch nen doofes design ist. alles in die oberklassen schieben ist doof, weil diese unnötig fett werden. zwischenklassen einführen führt zu quasi identischen klassen, in unterschiedlichen modulen.</p>
<p>mh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Mal angenommen, es existiert eine <code>map</code> mit der Eigenschaft:</p>
<pre><code>map&lt; string, Any &gt; storage;
    TimerA tmrA;
    TimerB tmrB;
    storage.insert( &quot;a&quot;, tmrA );
    storage.insert( &quot;b&quot;, tmrB );
    // ...
</code></pre>
<p>wie möchtest Du dann auf den Inhalt von <code>storage[&quot;a&quot;]</code> zugreifen. 'Weiß' der Code, dass sich dahinter nur ein Typ <code>TimerA</code> verbergen kann?</p>
<p>Können in einem storage auch zwei Objekte mit gleichem Typ vorkommen - oder sind alle Typen zwangsläufig unterschiedlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382693</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:33:36 GMT]]></title><description><![CDATA[<p>ne, da haben wir uns missverstanden. in die map will ich member der timer stecken. ich habe zum beispiel folgende kette:</p>
<p>TimerA &lt;- TimerB &lt;- TimerC</p>
<p>wobei TimerB und TimerC jeweils den Timer erweitern. Dann in einem andern Modul habe ich:</p>
<p>TimerA &lt;- TimerD &lt;- TimerE</p>
<p>wobei TimerD und TimerB nix logisch miteinander zu tun haben. Wenn man dann sich die Verwendung von TimerC anschaut, gibt es halt UseCases wo alle Eigenschaften von TimerA, TimerB und TimerC belegt sind, und welche, wo es nur ausgewählte sind.</p>
<p>Wenn ich nun schauen will, ob ich Member einsparen kann, muß ich alle Instanzen und Szenarien durchschauen. Mit der Map könnte man sich auf die spez. Getter/Setter zurückziehen.</p>
<p>Verständlicher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382695</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:36:13 GMT]]></title><description><![CDATA[<p>zur nutzung nochmal der pseudocode in schön:</p>
<pre><code>class Timer{

 ... 

protected: 
 map&lt;string, any&gt; storage; 
}

class SubTimer { 

public: 
TYPE_OF_PROPERTY_1 getProtery1(){ 

 return any_cast&lt;TYPE_OF_PROPERTY_1&gt;(storage[&quot;PROPERTY_1&quot;]); 
} 

void setPorperty1(TYPE_OF_PROPERTY_1 prop){ 
 storage[&quot;PROPERTY_1&quot;]= prop; 
} 
}
</code></pre>
<p>Besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382696</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:37:21 GMT]]></title><description><![CDATA[<p>natürlich so:</p>
<pre><code>class SubTimer : public Timer{..}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2382698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382698</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:39:51 GMT]]></title><description><![CDATA[<p>Musst du zur Laufzeit drauf zugreifen oder reicht es aus, beim Programmstart die Eigenschaften zu lesen? Wenn du das nur selten machst könntest du die Eigenschaften in einen string serialisieren und beim Lesen den string lesen, parsen und die entsprechenden Eigenschaften setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382699</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 14:44:55 GMT]]></title><description><![CDATA[<p>da es timer sind, werden diese eigenschaften natürlich zur laufzeit gesetzt bzw. gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382701</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 14:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 15:06:25 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<p>da es timer sind, werden diese eigenschaften natürlich zur laufzeit gesetzt bzw. gelesen.</p>
</blockquote>
<p>Gut, ich hab mich vielleicht etwas unglücklich ausgedrückt, natürlich müssen die Eigenschaften zur Laufzeit ausgelesen werden. Musst du die Eigenschaften häufig und/oder zeitkritisch auslesen oder kannst du es dir leisten, strings zu parsen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382702</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 11 Feb 2014 15:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Tue, 11 Feb 2014 15:09:08 GMT]]></title><description><![CDATA[<p>na es kommt halt eine nachricht rein, welche die eigenschaften des timers ändert. da es ein kommunikationsprotokoll ist, sollte es schon flott gehen. ist aber keine high-performance anwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382703</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Tue, 11 Feb 2014 15:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to map mit unterschiedlichen type on Wed, 12 Feb 2014 11:02:25 GMT]]></title><description><![CDATA[<p>Nochmal: Was haben die Dinger, die du in eine gemeinsame Map packen möchtest, gemeinsam?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2382798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2382798</guid><dc:creator><![CDATA[nman]]></dc:creator><pubDate>Wed, 12 Feb 2014 11:02:25 GMT</pubDate></item></channel></rss>