<?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[Unterschiedliche Datentype zur Laufzeit hinzufügen]]></title><description><![CDATA[<p>Hallo liebe Leute!</p>
<p>Für mehrere Klassen benötige ich die Möglichkeit zusätzliche Daten hinzufügen zu können. (int, double, string, boolean, objecte)</p>
<p>Mein Problem, ich bin nicht sicher welches der beste Weg ist, daher liste ich die Varianten auf.<br />
Der Code ist nur zum zeigen als allgemeiner Ansatz schnell mal hingetippt!<br />
Lesen, Schreiben und prüfen will ich primär über Templats erledigen</p>
<pre><code class="language-cpp">// Varinate 1 -&gt; 1 Container je Datentype
// Für jeden möglichen Datentype muss ich einen Container angelegen (hier map)
// Objecte sollten von einer Basisklasse abgeleite werden und weniger Container zu benötigen 

std::map&lt;int, int&gt; intMap;
std::map&lt;int, std::string&gt; strMap;
std::map&lt;int, Object&gt; objMap;

// ... Weiter map's für andere Datentypen
</code></pre>
<pre><code class="language-cpp">// Variante 2 -&gt; boost/any oder boost/variant
// Hier wäre nur ein Container erforderlich
// Es gibt natürlich Einschränkungen seitens boost bezüglich der Datentypen

std::map&lt;int, boost::any&gt; AnyMap;  // oder
std::map&lt;int, boost::any&gt; variantMap;
</code></pre>
<pre><code class="language-cpp">// Variante 3 -&gt; Union
// Hier wäre nur ein Container erforderlich
// Objecte sind ja hier nicht möglich, also ein 2. Contaioner für Objecte

union DatenUnion
{
    int iWert;
    double dWert;
    long lWert;
    // Weitere Datentypen
};

std::map&lt;int, DatenUnion&gt; uMap;
std::map&lt;int, std::string&gt; objMap;
</code></pre>
<p>Jetzt meine Fragen bzw. Vermutungen:</p>
<p>1.) boost::any und boost::varinat<br />
Hier wird mit Cast's gearbeitet!?<br />
keine Typen-Prüfung durch Compiler</p>
<p>2.) Union<br />
Die schnellste Lösung<br />
keine Typen-Prüfung durch Compiler</p>
<p>3.) Mehrere Conatiner<br />
Typen-Prüfung durch Compiler<br />
Höherer Speicherverbrauch</p>
<p>4.) Andere Lösungen<br />
Sehe ich nicht, hat hier wer eine bessere Alternative????</p>
<p>Derzeit stehe ich wohl etwas auf der Leitung und bitte daher um Hilfe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Mit liebem Gruß<br />
Eduard</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288392/unterschiedliche-datentype-zur-laufzeit-hinzufügen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 22:00:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288392.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Jun 2011 23:35:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Wed, 15 Jun 2011 23:35:41 GMT]]></title><description><![CDATA[<p>Hallo liebe Leute!</p>
<p>Für mehrere Klassen benötige ich die Möglichkeit zusätzliche Daten hinzufügen zu können. (int, double, string, boolean, objecte)</p>
<p>Mein Problem, ich bin nicht sicher welches der beste Weg ist, daher liste ich die Varianten auf.<br />
Der Code ist nur zum zeigen als allgemeiner Ansatz schnell mal hingetippt!<br />
Lesen, Schreiben und prüfen will ich primär über Templats erledigen</p>
<pre><code class="language-cpp">// Varinate 1 -&gt; 1 Container je Datentype
// Für jeden möglichen Datentype muss ich einen Container angelegen (hier map)
// Objecte sollten von einer Basisklasse abgeleite werden und weniger Container zu benötigen 

std::map&lt;int, int&gt; intMap;
std::map&lt;int, std::string&gt; strMap;
std::map&lt;int, Object&gt; objMap;

// ... Weiter map's für andere Datentypen
</code></pre>
<pre><code class="language-cpp">// Variante 2 -&gt; boost/any oder boost/variant
// Hier wäre nur ein Container erforderlich
// Es gibt natürlich Einschränkungen seitens boost bezüglich der Datentypen

std::map&lt;int, boost::any&gt; AnyMap;  // oder
std::map&lt;int, boost::any&gt; variantMap;
</code></pre>
<pre><code class="language-cpp">// Variante 3 -&gt; Union
// Hier wäre nur ein Container erforderlich
// Objecte sind ja hier nicht möglich, also ein 2. Contaioner für Objecte

union DatenUnion
{
    int iWert;
    double dWert;
    long lWert;
    // Weitere Datentypen
};

std::map&lt;int, DatenUnion&gt; uMap;
std::map&lt;int, std::string&gt; objMap;
</code></pre>
<p>Jetzt meine Fragen bzw. Vermutungen:</p>
<p>1.) boost::any und boost::varinat<br />
Hier wird mit Cast's gearbeitet!?<br />
keine Typen-Prüfung durch Compiler</p>
<p>2.) Union<br />
Die schnellste Lösung<br />
keine Typen-Prüfung durch Compiler</p>
<p>3.) Mehrere Conatiner<br />
Typen-Prüfung durch Compiler<br />
Höherer Speicherverbrauch</p>
<p>4.) Andere Lösungen<br />
Sehe ich nicht, hat hier wer eine bessere Alternative????</p>
<p>Derzeit stehe ich wohl etwas auf der Leitung und bitte daher um Hilfe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Mit liebem Gruß<br />
Eduard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2078823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078823</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Wed, 15 Jun 2011 23:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Wed, 15 Jun 2011 23:41:41 GMT]]></title><description><![CDATA[<p>Hängt vom Rest des Projekts ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2078826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078826</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 15 Jun 2011 23:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 01:00:32 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hängt vom Rest des Projekts ab.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26709">@EduardH</a>:<br />
Zeig mal wie das Interface aussehen soll, über das du diese Funktionalität ansprechen möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2078840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078840</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Jun 2011 01:00:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 07:18:31 GMT]]></title><description><![CDATA[<p>Als Ergebnis soll eine Framework entstehen, welches den Benutzer anbietet:</p>
<p>z.B:<br />
1.) Freie Erstellung von Objecten -&gt; Definition der Attributnamen und -Type<br />
2.) Erstellen von Regeln -&gt; z.B: if (O1.Preis &gt; O2.Preis) then O1.Gewicht = O2.Gewicht<br />
3.) Dateneingabe in den Objecten<br />
4.) Abfragen zu den Daten<br />
5.) Simulation (Soetwas wie selbstständiges Agieren und sehen wie sich die Daten ändern)<br />
6.) SourceCode generator für Objecte (Wunschdenken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
<p>Eine fertige Schnittstelle habe ich noch nicht erstellt, da ich noch am Anfang stehe<br />
Aber so als erster Ansatz (Const, &amp; und Co fehlen!)</p>
<pre><code class="language-cpp">// Diese Class beinhaltet alle Attribute welche zur Laufzeit eingefügt werden 
class AContainer
{
	private:
		// Die Container boost::any, Union, ....

	public:
		// Fügt ein neues Attribut hinzu oder überschreibt bestehendes
		template &lt;class T&gt;
		bool setAtt(int Key, T &amp;Att){}

		// löscht das Attribut
		template &lt;class T&gt;
		bool killAtt(int Key){}

		// Prüft ob Attribut existiert
		template &lt;class T&gt;
		bool existsAtt(int Key){}

		// Liefert den Wert des Attributs
		template &lt;class T&gt;
		T getAtt(int Key){}

		// Extrahiert die Daten in den Sicherungsbuffer
		template &lt;class T&gt;
		bool SaveMe(std::vector&lt;T&gt; Buffer){}

		// Lade die Daten aus dem Sicherungsbuffer 
		template &lt;class T&gt;
		bool LoadMe(std::vector&lt;T&gt; Buffer){}

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2078876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078876</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Thu, 16 Jun 2011 07:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 08:06:27 GMT]]></title><description><![CDATA[<p>Und wieso willst du das in C++ programmieren? Stehst du auf Schmerzen?</p>
<p>Nimm Lua oder Python oder sowas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2078908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078908</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Jun 2011 08:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 10:42:54 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und wieso willst du das in C++ programmieren? Stehst du auf Schmerzen?</p>
<p>Nimm Lua oder Python oder sowas.</p>
</blockquote>
<p>Lua, Python und Java mag ich einfach nicht!</p>
<p>Mit C++ finde ich es nicht so schlimm und Schmerzen bin ich von Assembler(x86) und Jiu Jitsu gewöhnt <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>Ich hatte auch noch eine Variante über Entwurfsmuster -&gt; Dekorierer und<br />
eine Variante über ein globale AttributClasse.<br />
Diese sind mir aber zu langsam sprengen die Kapselung.</p>
<p>Daher meine Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079022</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Thu, 16 Jun 2011 10:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 11:04:30 GMT]]></title><description><![CDATA[<p>Was hustbear meint, ist nich, dass C++ an sich SChmerzen verursacht, sondern genau in deinem Fall. In C++ Ist es einfach eine schlechte Idee, deinen Ansatz genauso umsetzen zu wollen, für sowas sind andere Sprachen gedacht.<br />
Wer in C++ nach Containern für verschiedene Typen fragt, der hat ein ganz schweres Design Problem in seinem Projekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079037</guid><dc:creator><![CDATA[DMM]]></dc:creator><pubDate>Thu, 16 Jun 2011 11:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 11:46:13 GMT]]></title><description><![CDATA[<p>DMM schrieb:</p>
<blockquote>
<p>Was hustbear meint, ist nich, dass C++ an sich SChmerzen verursacht, sondern genau in deinem Fall. In C++ Ist es einfach eine schlechte Idee, deinen Ansatz genauso umsetzen zu wollen, für sowas sind andere Sprachen gedacht.<br />
Wer in C++ nach Containern für verschiedene Typen fragt, der hat ein ganz schweres Design Problem in seinem Projekt.</p>
</blockquote>
<p>C++ finde ich auch nicht schwerzhaft <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="🙂"
    /></p>
<p>Hmmm..., wenn ich das richtig verstehe bedeutet das in Summe:<br />
Es ist also nicht verwunderlich das ich mir über diverse Lösungen den Kopf zerbrechen.<br />
Um die variablen Parameter komme ich nicht herrum, leider!</p>
<p>Mögliche Lösungen wären also:<br />
a: Ich suchen mir eine Lösungen aus<br />
oder<br />
b. Ich wechsle auf eine nicht streng typisierte Sprache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079065</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Thu, 16 Jun 2011 11:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 11:47:19 GMT]]></title><description><![CDATA[<p>Erklär mal, was du überhaupt tun möchtest. Das klingt mir stark nach schlechtem Design.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079067</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 16 Jun 2011 11:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:01:50 GMT]]></title><description><![CDATA[<p>C und C++ verlangen eine Deklaration der eingesetzten Datentypen. In C++ hast du die Möglichkeit zur Überlagerung und kannst damit einiges anfangen. Bei Klassen kann das schnell zur Knochenarbeit werden. Also teile erst einmal genau mit, was du vorhast und brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079078</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:09:48 GMT]]></title><description><![CDATA[<p>Du weißt schon, das du Lua wunderbar in C++ <em>einbetten</em> kannst? Du mußt nicht dein gesamtes Projekt in Lua machen, sondern nur den zu Lua wunderbar passenden Teil. Und C++ kannst du für den Rest nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079082</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:18:18 GMT]]></title><description><![CDATA[<p>EduardH schrieb:</p>
<blockquote>
<p>Als Ergebnis soll eine Framework entstehen, welches den Benutzer anbietet:<br />
z.B:<br />
1.) Freie Erstellung von Objecten -&gt; Definition der Attributnamen und -Type<br />
2.) Erstellen von Regeln -&gt; z.B: if (O1.Preis &gt; O2.Preis) then O1.Gewicht = O2.Gewicht<br />
3.) Dateneingabe in den Objecten<br />
4.) Abfragen zu den Daten<br />
5.) Simulation (Soetwas wie selbstständiges Agieren und sehen wie sich die Daten ändern)<br />
6.) SourceCode generator für Objecte (Wunschdenken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )<br />
Eine fertige Schnittstelle habe ich noch nicht erstellt, da ich noch am Anfang stehe</p>
</blockquote>
<p>Dann fängst Du mit dem falschen Ende an, fürchte ich.<br />
- Schreibe einen mathematischen Parser, der nur double berechnenm kann.<br />
- Schreibe einen neuen, der double und int kann.<br />
- Bastele weitere Schlüsselwörter if/the, while, print ein.<br />
- Wenn der Parse-Baum aus polymorphen C++-Objekten besteht, ist 6.) extrem einfach nachzurüsten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079085</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:19:18 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erklär mal, was du überhaupt tun möchtest. Das klingt mir stark nach schlechtem Design.</p>
</blockquote>
<p>Ah, die Design Keule mal wieder. Ist das Dot's Zweitnick?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079086</guid><dc:creator><![CDATA[BAUMKOPFHOLZFAUST]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:31:36 GMT]]></title><description><![CDATA[<p>BAUMKOPFHOLZFAUST schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erklär mal, was du überhaupt tun möchtest. Das klingt mir stark nach schlechtem Design.</p>
</blockquote>
<p>Ah, die Design Keule mal wieder. Ist das Dot's Zweitnick?</p>
</blockquote>
<p>Wer ist Dot?<br />
Die Design-Keule ist hier angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079098</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 12:50:03 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Wer ist Dot?</p>
</blockquote>
<p>Ein User mit dem Nick 'Dot', Watson!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079110</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 16 Jun 2011 12:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 14:00:11 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>volkard schrieb:</p>
<blockquote>
<p>EduardH schrieb:</p>
<blockquote>
<p>Als Ergebnis soll eine Framework entstehen, welches den Benutzer anbietet:<br />
z.B:<br />
1.) Freie Erstellung von Objecten -&gt; Definition der Attributnamen und -Type<br />
2.) Erstellen von Regeln -&gt; z.B: if (O1.Preis &gt; O2.Preis) then O1.Gewicht = O2.Gewicht<br />
3.) Dateneingabe in den Objecten<br />
4.) Abfragen zu den Daten<br />
5.) Simulation (Soetwas wie selbstständiges Agieren und sehen wie sich die Daten ändern)<br />
6.) SourceCode generator für Objecte (Wunschdenken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )<br />
Eine fertige Schnittstelle habe ich noch nicht erstellt, da ich noch am Anfang stehe</p>
</blockquote>
<p>Dann fängst Du mit dem falschen Ende an, fürchte ich.<br />
- Schreibe einen mathematischen Parser, der nur double berechnenm kann.<br />
- Schreibe einen neuen, der double und int kann.<br />
- Bastele weitere Schlüsselwörter if/the, while, print ein.<br />
- Wenn der Parse-Baum aus polymorphen C++-Objekten besteht, ist 6.) extrem einfach nachzurüsten.</p>
</blockquote>
<p>Naja ich fing bei folgenden Ende an</p>
<p>Der Benutzer kann sich sein Attribute selbst definieren.<br />
z.B: Datentype, Minwert, MaxWert, Name, Anmerkung und automatische id Vergabe.<br />
Diese Informationen sind als leicht als Object zu definieren und liegen in einer map um über die id zugreifen zu können.</p>
<p>Aus den definierten Attributen baut er jetzt sein Object zusammen.<br />
Hier ist mein einziges Problem in der Speicherung, daher meine verschiedenen Ansätze. Vieles lässt sich ja einfach über templats erledigen</p>
<p>Mit allen anderen Punkten (2-6) gibt es kein Problem!!!!</p>
<p>Die Idee bereits nur double zu berechnen, bringt mich auf folgendes <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Die Anzahl der möglichen Datentypen kann auf 3 reduzieren werden<br />
map(double)<br />
mab(string)<br />
map(object)</p>
<p>Das so zumachen lag mir fern!<br />
Historisch bedingt (2k Ram war mal viel) bin ich ein Sparefroh bezüglich Speicher und Laufzeit.</p>
<p>Besten Danke!<br />
Eduard</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23275">@314159265358979</a></strong><br />
Die Design Keule sollte erst ausgepackt werden, wenn ein Design erstellt wurde!Nicht alles was flexibel/generisch sein soll, ist auch ein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079190</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Thu, 16 Jun 2011 14:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 18:31:54 GMT]]></title><description><![CDATA[<p>Ich habe dein Design lediglich in Frage gestellt, nicht gesagt dass es schlecht ist. Und für mich sieht das immer noch komisch aus, ich kann aber auch mit deiner Beschreibung nichts anfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079389</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 16 Jun 2011 18:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 21:12:03 GMT]]></title><description><![CDATA[<p>@314<br />
&quot;Verstehe ich nicht&quot; =&gt; &quot;klingt nach schlechten Design&quot;<br />
1A Logik <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/2079485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079485</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 16 Jun 2011 21:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 21:38:05 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich habe dein Design lediglich in Frage gestellt, nicht gesagt dass es schlecht ist. Und für mich sieht das immer noch komisch aus, ich kann aber auch mit deiner Beschreibung nichts anfangen.</p>
</blockquote>
<p>Ich versuche es mal anders zu beschrieben.</p>
<p>Es gibt ein Basisklasse Object, als einfaches Beispiel:</p>
<pre><code class="language-cpp">class Object
{
   private:
      std::string Vorname;
      std::string Nachname;
      std::string Geburtsdatum;
   public:
      bool setVorname(std::string){}
      // und was so alles benötigt wird

}
</code></pre>
<p>Diesem Object sollen zur Laufzeit neue Variablen/Member hinzugefügt werden.<br />
Die <strong>Datentypen</strong> sind <strong>zur Compilezeit bekannt!</strong><br />
Die <strong>Anzahl der Member</strong> ist <strong>zur Compilezeit nicht bekannt!</strong></p>
<p>Die erlaubten Datentype sind in meinem Fall:</p>
<p>int<br />
bool<br />
double<br />
std::string<br />
Referencen auf das Basisobject bzw. abgeleitete Objecte der Basis</p>
<p>Dies würde, da C++ streng typisiert ist, für jeden Datentype einen eigenen Container erfordern.<br />
Für jeden möglichen Datentype muss ein Container in die class integriert werden<br />
Templates helfen mir den geschriebenen Code zu vereinfachen, die Anzahl der Container bleibt aber gleich.</p>
<p>Die Basisklasse Object würde verreinfacht so aussehen</p>
<pre><code class="language-cpp">class Object
{
   private:
      std::string Vorname;
      std::string Nachname;
      std::string Geburtsdatum;
      std::map&lt;int, int&gt; intMap; 
      std::map&lt;int, bool&gt; booMap; 
      std::map&lt;int, double&gt; booMap; 
      std::map&lt;int, std::string&gt; strMap; 
      std::map&lt;int, Object&gt; objMap;

   public:
      bool setVorname(std::string){}
      // und was so alles benötigt wird

}
</code></pre>
<p>Daher habe ich mir mehrere Lösungsansätze überlegt um dennoch neue Member hinzuzufügen <strong>ohne</strong> gleich eine <strong>Container-Inflation</strong> zu erhalten<br />
Und diese Lösungsansätze gepostet mit der Bitte um Hilfe!</p>
<p>War das jetzt verständlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079496</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Thu, 16 Jun 2011 21:38:05 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Thu, 16 Jun 2011 22:10:58 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>BAUMKOPFHOLZFAUST schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erklär mal, was du überhaupt tun möchtest. Das klingt mir stark nach schlechtem Design.</p>
</blockquote>
<p>Ah, die Design Keule mal wieder. Ist das Dot's Zweitnick?</p>
</blockquote>
<p>Wer ist Dot?<br />
Die Design-Keule ist hier angebracht.</p>
</blockquote>
<p>Das bin wohl ich. Und nein, 314159265358979 bin nicht ich. Aber ich hätt die Design Keule auch ausgepackt bzw. tus gleich mal.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26709">@EduardH</a>: deiner Beschreibung nach find ich dass dein Vorschlag prinzipiell mal eine Lösung ist, wobei ich statt einer map einfach einen vector verwenden würde falls es sich einrichten lässt dass die keys aufsteigende Integer sind. Allerdings find ich das Problem an sich ein wenig merkwürdig, warum genau musst du denn diese Daten hinzufügen, was soll mit denen mal geschehen? Ein Objekt das für sämliche Member Getter und Setter anbietet ist imo irgendwie was ziemlich kaputtes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079518</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 16 Jun 2011 22:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Fri, 17 Jun 2011 07:08:24 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>@314<br />
&quot;Verstehe ich nicht&quot; =&gt; &quot;klingt nach schlechten Design&quot;<br />
1A Logik <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>
</blockquote>
<p>Das Bedürfnis, boost::any zu verwenden ist fast immer schlecht <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>@Threadersteller: Jetzt ist mir klar was du haben möchtest. Allerdings finde ich es, wie dot, auch sehr merkwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079579</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 17 Jun 2011 07:08:24 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Fri, 17 Jun 2011 08:06:06 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>@314<br />
&quot;Verstehe ich nicht&quot; =&gt; &quot;klingt nach schlechten Design&quot;<br />
1A Logik <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>
</blockquote>
<p>Das Bedürfnis, boost::any zu verwenden ist fast immer schlecht <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>
</blockquote>
<p>Dinge zu beurteilen, bevor man sie versteht, ist fast immer schlecht.<br />
Dinge nachzuplappern, bevor man selbst damit Erfahrung machen konnte, ist auch nicht optimal.</p>
<p>Und designe bitte selbst erstmal ein paar Dinge (und implementiere diese Designs dann auch), bevor du mit Aussagen wie &quot;schlechtes Design&quot; um dich wirfst.<br />
Null Erfahrung, aber immer grosse Klappe - das nervt schon ordentlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079614</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Jun 2011 08:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Fri, 17 Jun 2011 08:34:52 GMT]]></title><description><![CDATA[<p><strong>@Alle Design Zweifler :p</strong> :</p>
<p>Was ist es: Ein Framework für Planspiele</p>
<p>Wie schon geschrieben:<br />
1.) Freie Erstellung von Objecten -&gt; Definition der Attributnamen und -Type<br />
2.) Erstellen von Regeln -&gt; z.B: if (O1.Preis &gt; O2.Preis) then O1.Gewicht = O2.Gewicht<br />
3.) Dateneingabe in den Objecten<br />
4.) Abfragen zu den Daten<br />
5.) Simulation (So etwas wie selbstständiges Agieren und sehen wie sich die Daten ändern)<br />
6.) SourceCode generator für Objecte</p>
<p>Zweck:<br />
Es soll dem Benutzer bei Durchführung von Planspielen unterstützen.<br />
<strong>Edit:</strong> <a href="http://de.wikipedia.org/wiki/Planspiel" rel="nofollow">http://de.wikipedia.org/wiki/Planspiel</a><br />
Dazu muß es möglich sein die einzelnen Objekte, je nach Anforderung und Thema, flexibel erstellen zu können.<br />
Egal ob das Objekt ein Auto, Haus, Zug, Baum, Karotte, Aktienkurs, Krankheiten, Telefon, Schneefall, Täter, Schulnoten, Tageszeit , Berge, … ist.</p>
<p>Alles ist möglich, nix is fix! -&gt; Ich bin nicht dazu in der Lage das in Klassen ohne flexible Attribute/Member zu bekommen.</p>
<p>Ein nicht so komplexes Thema wo flexibilität erforderlich ist:<br />
Möglichweise kennt wer Gesprächsleitfäden wie sie in CallCentern verwendet werden!?<br />
Und nein, ich mache hier nichts für ein CallCenter oder andere Institution die unsere Telefone zu allen möglichen und unmöglichen Zeiten erklingen lassen!</p>
<p>Map ist hier richtig. Der key(int) zu den Atrributen ist Global für alle Objekte.<br />
So ist auch gesichert das in jeden Object der key=17 die selbe Bedeutung hat.</p>
<p>Ist's jetzt Klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079619</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Fri, 17 Jun 2011 08:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Fri, 17 Jun 2011 09:59:44 GMT]]></title><description><![CDATA[<p>Ok, dann ist boost::any wohl eine Lösung. Wobei eine Skriptsprache vermutlich die mit Abstand beste Lösung wäre. Eine Alternative wäre vielleicht noch ein System wie das folgende:</p>
<pre><code class="language-cpp">class IEvaluable
{
public:
  virtual int asInt(int v) = 0;
  virtual float asFloat(float v) = 0;
  ...
};

class IComparable
{
public:
  virtual int compare(int v) = 0;
  virtual int compare(float v) = 0;
  ...
};

class IAttribute : virtual public IComparable, virtual public IEvaluable
{
public:
  virtual int compare(IComparable&amp; v) = 0;

  virtual bool setValue(const IEvaluable&amp; v) = 0;
};

template &lt;typename T&gt;
class Attribute : public IAttribute
{
private:
  T value;
public:
  int compare(int v) {...}
  int compare(float v) {...}
  int compare(const IComparable&amp; v)
  {
    return v.compare(value);
  }

  bool setValue(const IEvaluable&amp; v) {...}
};

class Rule
{
public:
  virtual void evaluate() = 0;
};

class Object
{
  std::unordered_map&lt;std::string, IAttribute*&gt; attributes;
public:
  IAttribute* getAttribute(const std::string&amp; name) {...}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2079673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079673</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 17 Jun 2011 09:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Fri, 17 Jun 2011 12:18:47 GMT]]></title><description><![CDATA[<p>Wenn ein Attribut nur wenige bekannte Typen haben kann, dann wäre evtl. auch boost::variant&lt;&gt; eine Möglichkeit. IMO dann besser als boost::any, wenn man die Möglichkeit gar nicht braucht da *alles* reinstecken zu können.</p>
<p>Type-Safety ist dann auch sehr gut. Und es gibt fertige Hilfsfunktionen wie boost::apply_visitor, so dass man das Type-Dispatching nicht selbst machen muss.</p>
<p>Eine Lösung über &quot;normale&quot; Laufzeitpolymorphie, wie die von dot, ist sicher auch eine gute Möglichkeit.</p>
<p>Trotzdem bin ich immer noch der Meinung, dass hier eine Sprache wie Lua oder Python angesagt wäre. Ganz einfach weil Scriptsprachen u.a. genau dafür gemacht wurden.</p>
<p>Und wieso das Rad neu erfinden? Gerade was die Punkte (2) und (5) angeht: da müsstest du eine Eigene Syntax definieren, einen Parser + Interpreter dafür schreiben, die so entstandene Mini-Sprache dokumentieren und den Leuten beibringen die das verwenden wollen.<br />
Lies dir mal das da durch: <a href="http://en.wikipedia.org/wiki/Inner-platform_effect" rel="nofollow">http://en.wikipedia.org/wiki/Inner-platform_effect</a></p>
<p>Gerade Lua ist sehr einfach ein C++ Programme einzubetten, kann einfach &quot;dicht&quot; gemacht werden (so dass ein Script keine unerwünschten Dinge machen kann wie Files lesen/schreiben/löschen etc.), und bietet im Prinzip alles was gefordert wurde - bis auf Punkt (6).</p>
<p>Wobei mir Punkt (6) auch nicht 100% klar ist: was für Code soll generiert werden? C++ Code? Code der wieder auf die &quot;dynamische Attribute&quot; Implementierung zurückgreift? Oder Code für &quot;normale&quot; C++ Objekte (ohne die &quot;dynamische Attribute&quot; Sache), deren Funktionalität den &quot;dynamisch&quot; definierten entspricht? ...?<br />
Und was soll mit dem generierten Code dann gemacht werden, was ist der Zweck dieser Funktion?</p>
<p>Willst du vielleicht ein Rapid-Prototyping System basteln, aus dessen &quot;Source&quot; (Definitionsfiles, Input, wie auch immer man es nennen will) dann ein C++ Gerüst generiert werden kann, so dass man es als Basis einer reinen C++ Implementierung verwenden kann?</p>
<p>Aber ziemlich egal was Punkt (6) nun genau bedeutet, auch das liesse sich sicher mit Hilfe von Lua oder einer anderen Scriptsprache umsetzen. Nur müsste man es halt selbst dazuprogrammieren. Was in Summe aber vermutlich viel weniger Action ist, als das ganze System in C++ selbst zu schreiben.</p>
<p>Nochwas zu Lua: du kannst dir da relativ frei aussuchen, wie viel du wirklich in Lua implementieren willst. Theoretisch kannst du Lua in C++ einbinden, und kaum mehr damit machen, als dessen &quot;Table&quot; Implementierung zu verwenden - da die ziemlich genau das ist, was du willst: Objekte mit dynamischen &quot;Membern&quot;. Das andere Extrem wäre alles komplett in Lua zu schreiben. Und alles dazwischen ist auch möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2079757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2079757</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Jun 2011 12:18:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Datentype zur Laufzeit hinzufügen on Mon, 20 Jun 2011 07:25:15 GMT]]></title><description><![CDATA[<p>Vor <a href="http://en.wikipedia.org/wiki/Inner-platform_effect" rel="nofollow">http://en.wikipedia.org/wiki/Inner-platform_effect</a> hatte ich auch schon leichte Panik.</p>
<p>Nach einen Lua Wochende, bekenne ich folgendes:<br />
Ich wurden vom Lua Saulus zum Paulus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    />.<br />
Der Mix auc C++ und Lua erspart mir wirklich einiges an Arbeit und Ärger.</p>
<p>Zu Punkt 6: Es war als Performace-Option gedacht. Jetzt kein Thema mehr.</p>
<p>Ich bedanke mich hiermit noch mal! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>MlG<br />
Eduard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080926</guid><dc:creator><![CDATA[EduardH]]></dc:creator><pubDate>Mon, 20 Jun 2011 07:25:15 GMT</pubDate></item></channel></rss>