<?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[Beliebiger Datentyp in C++]]></title><description><![CDATA[<p>Abend,</p>
<p>ich schreibe mir gerade eine kleine GUI in C++ und bin jetzt bei der Combobox.<br />
Ich bin jetzt bei der addItem() Methode, die der Kombobox einen Eintrag hinzufügt. Neben einem Label soll der Benutzer auch einen beliebigen Datentyp (einen int, eine selber geschriebene struct etc.) an das Item hängen (um mehr Daten als nur einen string hinzuzufügen).</p>
<p>Ich brauche also sowas:</p>
<pre><code>void Combobox::addItem(const std::string&amp; label, Anything userData);
</code></pre>
<p>Mögliche Aufrufe:</p>
<pre><code>Point p;
p.x = 100;
p.y = 20;
int myInt = 3;
cb-&gt;addItem(&quot;Eintrag 1&quot;, myInt);
cb-&gt;addItem(&quot;Eintrag 2&quot;, p);
</code></pre>
<p>Wie kann ich das machen, dass der Anwender im 2. Parameter ALLES übergeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310440/beliebiger-datentyp-in-c</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 19:22:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310440.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Nov 2012 18:54:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 18:54:28 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>ich schreibe mir gerade eine kleine GUI in C++ und bin jetzt bei der Combobox.<br />
Ich bin jetzt bei der addItem() Methode, die der Kombobox einen Eintrag hinzufügt. Neben einem Label soll der Benutzer auch einen beliebigen Datentyp (einen int, eine selber geschriebene struct etc.) an das Item hängen (um mehr Daten als nur einen string hinzuzufügen).</p>
<p>Ich brauche also sowas:</p>
<pre><code>void Combobox::addItem(const std::string&amp; label, Anything userData);
</code></pre>
<p>Mögliche Aufrufe:</p>
<pre><code>Point p;
p.x = 100;
p.y = 20;
int myInt = 3;
cb-&gt;addItem(&quot;Eintrag 1&quot;, myInt);
cb-&gt;addItem(&quot;Eintrag 2&quot;, p);
</code></pre>
<p>Wie kann ich das machen, dass der Anwender im 2. Parameter ALLES übergeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269942</guid><dc:creator><![CDATA[Generiker]]></dc:creator><pubDate>Sun, 11 Nov 2012 18:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 18:56:11 GMT]]></title><description><![CDATA[<p>Templates. Das schreit geradezu nach Templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269944</guid><dc:creator><![CDATA[Der Tobi]]></dc:creator><pubDate>Sun, 11 Nov 2012 18:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 18:56:55 GMT]]></title><description><![CDATA[<p>Auch wenn das gehen würde lieber für jeden Typ eine andere Funktion.<br />
Oder du nimmst Templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269945</guid><dc:creator><![CDATA[Cho++]]></dc:creator><pubDate>Sun, 11 Nov 2012 18:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 18:58:11 GMT]]></title><description><![CDATA[<p>Wie weisst du im Nachhinein, welchen Datentyp du an das Item gehängt hast? Irgendwie musst du ja darauf zugreifen.</p>
<p>&lt; <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="💡"
    /> &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269946</guid><dc:creator><![CDATA[glühbirne]]></dc:creator><pubDate>Sun, 11 Nov 2012 18:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:22:00 GMT]]></title><description><![CDATA[<p>Für die addItem-Funktion kann man sich irgendwas ausdenken, spannend wird die getItem-Funktion und deren Returnwert.</p>
<p>Wahrscheinlich wirst du nicht an einem void * vorbei kommen, vielleicht mit einem enum zusammen, das sagt, welcher Datentyp dahinter steckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269952</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:22:10 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, wie das mit Templates gehen soll. Die Klasse ComboBox selber soll ja kein Template sein. Und wenn ich nur die Methode zu einer Template-Methode mache, wie soll ich dann die generische UserData in einer Datenstruktur der ComboBox speichern?</p>
<p>Und mehrere Überladungen von addItem() bringt mir nichts, da ich als Entwickler des UI Frameworks nicht weiß, was die Anwender mal als UserData übergeben wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269953</guid><dc:creator><![CDATA[Generiker]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:24:42 GMT]]></title><description><![CDATA[<p>Beantworte doch bitte meine Frage. Davon hängt nämlich ab, was man dir empfehlen kann.</p>
<p>&lt; <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="💡"
    /> &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269954</guid><dc:creator><![CDATA[glühbirne]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:33:32 GMT]]></title><description><![CDATA[<p>Für sowas gibt es z.B. boost::any.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269958</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:40:44 GMT]]></title><description><![CDATA[<p>Naja, der Datentyp kann immer gleich sein. Man kann z.B. eine ComboBox haben mit UserDatas vom Typ einer struct Point, und eine andere ComboBox vielleicht mit simplen ints.<br />
Beispiel:</p>
<pre><code>Point p1, p2, p3; // 3 Point struct

ComboBox* cb = ...
cb-&gt;addItem(&quot;entry 1&quot;, p1); // cb enthält nur UserData vom Typ Point
cb-&gt;addItem(&quot;entry 2&quot;, p2);
...

Point p = cb-&gt;getItem(1); // UserData von Item 1 holen
</code></pre>
<p>Wenn ich das mit Templates machen will, muss doch ComboBox eine Templateklasse werden, sprich ComboBox&lt;Point&gt;, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269963</guid><dc:creator><![CDATA[Generiker]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:43:02 GMT]]></title><description><![CDATA[<p>Generiker schrieb:</p>
<blockquote>
<p>Die Klasse ComboBox selber soll ja kein Template sein.</p>
</blockquote>
<p>Warum nicht? Dann kann sich der Nutzer am Ende einen Datentypen aussuchen, den er in der ComboBox speichern will und du kannst saubere Funktionen schreiben. Es können nur nicht verschiedene Datentypen in einer ComboBox gespeichert werden, was aber ok sein sollte, denn der Weg mit dem void * oder boost::any steht dem Nutzer weiterhin offen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269965</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Sun, 11 Nov 2012 19:58:00 GMT]]></title><description><![CDATA[<p>Generiker schrieb:</p>
<blockquote>
<p>Wenn ich das mit Templates machen will, muss doch ComboBox eine Templateklasse werden, sprich ComboBox&lt;Point&gt;, oder?</p>
</blockquote>
<p>Richtig. Aber das machst nicht du, das macht der Nutzer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269970</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sun, 11 Nov 2012 19:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 08:32:57 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>Generiker schrieb:</p>
<blockquote>
<p>Wenn ich das mit Templates machen will, muss doch ComboBox eine Templateklasse werden, sprich ComboBox&lt;Point&gt;, oder?</p>
</blockquote>
<p>Richtig. Aber das machst nicht du, das macht der Nutzer.</p>
</blockquote>
<p>Was soll den mit dem &quot;Item&quot; gemacht werden, nachdem es hinzugefügt wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270020</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Nov 2012 08:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 08:44:47 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>nwp3 schrieb:</p>
<blockquote>
<p>Generiker schrieb:</p>
<blockquote>
<p>Wenn ich das mit Templates machen will, muss doch ComboBox eine Templateklasse werden, sprich ComboBox&lt;Point&gt;, oder?</p>
</blockquote>
<p>Richtig. Aber das machst nicht du, das macht der Nutzer.</p>
</blockquote>
<p>Was soll den mit dem &quot;Item&quot; gemacht werden, nachdem es hinzugefügt wurde?</p>
</blockquote>
<p>Nichts. Die sollen einfach nur gespeichert werden und wenn ein Item ausgewaehlt wurde, wird ein Event ausgeloest, dass dem Callback die UserData zurueckliefert.</p>
<p>Ja, eine Templateklasse waere moeglich, aber irgendwie finde ich es etwas befremdlich, sowas zu schreiben: ComboBox&lt;Point&gt; p;<br />
Ich dachte auch schon einfach an void* als UserData Type, dann koennte man einfach machen:</p>
<pre><code>cb-&gt;addItem(&quot;foo&quot;, new Point(2,3));
</code></pre>
<p>Mein Problem ist nur: Wer soll den Speicher loeschen? ComboBox kann es nicht machen, da ja ein delete auf einen void Zeiger nicht funktioniert. boost::any ist interessant, aber wegen der einen Methode moechte ich mir nicht extra boost holen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270025</guid><dc:creator><![CDATA[Generiker]]></dc:creator><pubDate>Mon, 12 Nov 2012 08:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 08:54:58 GMT]]></title><description><![CDATA[<p>Ich wuerde einfach Type-Erasure verwenden. boost::any funktioniert nicht, weil du ja irgendwie an eine Darstellung der Daten rankommen musst. Ich bastle da mal eben was.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270029</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 12 Nov 2012 08:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 09:16:50 GMT]]></title><description><![CDATA[<p>Koennte dann ungefaehr so aussehen:</p>
<pre><code>struct printable
{
	template &lt;typename T&gt;
	printable(T const* value)
		: data_(value), to_string_impl_(&amp;printable::to_string_impl&lt;T&gt;)
	{}

	std::string to_string() const
	{
		return to_string_impl_(data_);
	}

private:
	void const* data_;
	std::string (* to_string_impl_) (void const*);

	template &lt;typename T&gt;
	static std::string to_string_impl(void const* data)
	{
		std::ostringstream oss;
		oss &lt;&lt; *static_cast&lt;T const*&gt;(data);
		return oss.str();
	}
};
</code></pre>
<p><a href="http://ideone.com/VFfDa8" rel="nofollow">http://ideone.com/VFfDa8</a></p>
<p>Deine addItem-Funktion nimmt dann einfach so ein printable als Parameter. Der Konstruktor nimmt ganz bewusst einen Zeiger, damit hier wirklich nur LValues uebergeben werden koennen und damit intern keine Zeiger auf temporaries entstehen, wenn du ein printable abspeicherst. Damit ein Typ printable ist, muss er einfach operator &lt;&lt; ueberladen haben. Du kannst dafuer natuerlich auch eine eigene Funktion bauen, wenn dir operator &lt;&lt; nicht gefaellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270036</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 12 Nov 2012 09:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 11:11:39 GMT]]></title><description><![CDATA[<p>Ich würde ein <code>std::function</code> -Objekt als Handler mitgeben, der bei Bedarf die gewünschten User-Daten gebunden hat. Da spart man sich das Gefrickel mit irgendwelchen Formen von Type-Ereasure.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270056</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Nov 2012 11:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 11:39:19 GMT]]></title><description><![CDATA[<p>Generiker schrieb:</p>
<blockquote>
<p>Wenn ich das mit Templates machen will, muss doch ComboBox eine Templateklasse werden, sprich ComboBox&lt;Point&gt;, oder?</p>
</blockquote>
<p>Obligatorischer Hinweis: ComboBox wäre in diesem Fall keine Templateklasse, sondern eine Klassentemplate (d. h. Klassenvorlage). Insbesondere ist ComboBox selbst dann keine Klasse!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270061</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 12 Nov 2012 11:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Beliebiger Datentyp in C++ on Mon, 12 Nov 2012 12:15:53 GMT]]></title><description><![CDATA[<p>Type-Erasure hat mit gefrickel relativ wenig zu tun. Finde das sogar eleganter als std::function, und performanter ist es vermutlich auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270076</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 12 Nov 2012 12:15:53 GMT</pubDate></item></channel></rss>