<?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[Objekt erstellen wenn der Klassenname Variabel ist?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem bin nicht sicher wie ich das benennen soll, evtl. liegt darin auch die Ursache warum ich dazu nicht finde.</p>
<p>Ich habe mir selbst eine Tabelle mit erstellt, denke die Realisierung spielt keine Rolle, wird evtl. noch geändert. In dieser Tabelle sind verschiedene Parameter einer bestimmten Klasse zugeordnet. Anhand dieser Parameter erstelle ich ein Objekt der jeweiligen Klasse.</p>
<p>Als Beispiel:</p>
<p>{&quot;blau&quot;, CBlau }<br />
{&quot;rot&quot;, CRot }</p>
<p>.....<br />
if (param == blau)<br />
farbe = new CBlau;<br />
else if (param == rot)<br />
frabe = new CRot;<br />
....</p>
<p>Dies funktioniert auch ohne Probleme, allerdings möchte ich gerne den teil in der das Objekt erzeugt wird generisch machen, daher befindet sich auch der Name in der Tabelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245555/objekt-erstellen-wenn-der-klassenname-variabel-ist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 14:41:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245555.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Jul 2009 16:09:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:09:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem bin nicht sicher wie ich das benennen soll, evtl. liegt darin auch die Ursache warum ich dazu nicht finde.</p>
<p>Ich habe mir selbst eine Tabelle mit erstellt, denke die Realisierung spielt keine Rolle, wird evtl. noch geändert. In dieser Tabelle sind verschiedene Parameter einer bestimmten Klasse zugeordnet. Anhand dieser Parameter erstelle ich ein Objekt der jeweiligen Klasse.</p>
<p>Als Beispiel:</p>
<p>{&quot;blau&quot;, CBlau }<br />
{&quot;rot&quot;, CRot }</p>
<p>.....<br />
if (param == blau)<br />
farbe = new CBlau;<br />
else if (param == rot)<br />
frabe = new CRot;<br />
....</p>
<p>Dies funktioniert auch ohne Probleme, allerdings möchte ich gerne den teil in der das Objekt erzeugt wird generisch machen, daher befindet sich auch der Name in der Tabelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743650</guid><dc:creator><![CDATA[Keldan]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:18:58 GMT]]></title><description><![CDATA[<p>Um die if-orgie an sich kommst Du nicht herum. Ok, statt if geht auch switch, Tabellennachgucken, std::map und so. Aber allen gemeinsam ist, daß Du die std::map oder orgie im C++-Code mit den möglichen Typen selber füttern mußt.<br />
Es gibt viele Überlegungen dazu, wie man das am geschicktesten löst, das Suchwort dazu heißt &quot;factory&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743655</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:18:34 GMT]]></title><description><![CDATA[<p>Du kannst in deiner Tabelle neben dem Wert &quot;blau&quot; auch das entsprechende prototypische Objekt speichern. Dieses sollte eine Methode Clone anbieten, mit der gleiche Objekte erzeugt werden. Das ist aber nur eine Moeglichkeit, das Factory Pattern bietet dir weitere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743657</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:19:24 GMT]]></title><description><![CDATA[<p>Gehe eine Indirektion weiter. Im Code fest eingebaut machst du das so hnlich wie du es bisher gemacht hast, also ein Mapping von einer Konstanten X auf eine Klasse C, das damit fest verdrahtet ist. In der Tabelle trägst du dann Paare von Konstanten (Y, <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> ein, die das konfigurierbare Mapping machen. Zur Laufzeit liest du dann das Y als Parameter, findest an Hand der Tabelle das X und erzeugst dadurch das C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743660</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:23:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class CColor
{
public:

	virtual CColor *create()
	{
		return new CColor();
	}
};

class CBlue : public CColor
{
public:

	virtual CColor *create()
	{
		return new CBlue();
	}
};

struct COLOR
{
	const char *Name;
	CColor *Creator;
};

COLOR colors[1] =
{
	{&quot;blue&quot;, new CBlue} //muss natürlich wieder deleted werden
};

//oder:

std::map&lt;std::string, CColor*&gt; colors;
colors[&quot;blue&quot;] = new CBlue(); //muss natürlich wieder deleted werden

//Benutzung:
CColor *col = colors[&quot;blue&quot;]-&gt;create();
</code></pre>
<p>Ist nicht besonders schön, aber vielleicht ein Ansatz oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743664</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:23:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:24:53 GMT]]></title><description><![CDATA[<p>Oder du erstellst eine abstrakte Basisklasse &quot;IFarbe&quot;, von der alle Farben erben. Somit kannst du ganz ohne if und else einfach farbePtr = new CRot oder farbePtr = new CBlau schreiben, das nennt man polymorphie!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743667</guid><dc:creator><![CDATA[Guter Rat]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Wed, 15 Jul 2009 16:37:41 GMT]]></title><description><![CDATA[<p>Guter Rat schrieb:</p>
<blockquote>
<p>Oder du erstellst eine abstrakte Basisklasse &quot;IFarbe&quot;, von der alle Farben erben. Somit kannst du ganz ohne if und else einfach farbePtr = new CRot oder farbePtr = new CBlau schreiben, das nennt man polymorphie!</p>
</blockquote>
<p>Naja - das hilft einem bei der Benutzung der Objekte - aber nicht bei der Erzeugung, um die es hier geht.<br />
Die ganze schöne Polymorphie ändert nichts daran, dass hinter dem &quot;new&quot; der konkrete Klassenname kommen muss (auch wenn man ihn in einen template parameter, eine factory oder oder oder auslagert).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743676</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 15 Jul 2009 16:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Thu, 16 Jul 2009 07:48:50 GMT]]></title><description><![CDATA[<p>Danke, für die schnelle Antworten. Mit dem Gedanken an eine Factory hatte ich auch schon gespielt. Ich hatte nur nicht soweit gedacht wie TyRoXx, der Kniff mit der Creator Methode ist nicht schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743949</guid><dc:creator><![CDATA[Keldan]]></dc:creator><pubDate>Thu, 16 Jul 2009 07:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Fri, 17 Jul 2009 00:27:47 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1536196.html#1536196" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1536196.html#1536196</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744582</guid><dc:creator><![CDATA[Caster]]></dc:creator><pubDate>Fri, 17 Jul 2009 00:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Fri, 17 Jul 2009 10:51:34 GMT]]></title><description><![CDATA[<p>Keldan schrieb:</p>
<blockquote>
<p>Mit dem Gedanken an eine Factory hatte ich auch schon gespielt. Ich hatte nur nicht soweit gedacht wie TyRoXx, der Kniff mit der Creator Methode ist nicht schlecht.</p>
</blockquote>
<p>Der &quot;Kniff&quot; mit der Creator Methode wie es TyRoXx macht, ist IMO Kacke, da er dadurch die Factory und das zu erzeugende Objekt vermischt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744734</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Jul 2009 10:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Fri, 17 Jul 2009 11:27:12 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Der &quot;Kniff&quot; mit der Creator Methode wie es TyRoXx macht, ist IMO Kacke, da er dadurch die Factory und das zu erzeugende Objekt vermischt.</p>
</blockquote>
<p>Sehe ich genauso.<br />
Also ein den Objekten paralleles Klassenbüschel aufmachen. Die erben praktischerweise von einer gemeinsamen Basis. Um sie besser basteln zu können, sind sie praktischerweise Templateinstanziierung4n desselben templates. Klassenname und Klassenbeschreibungsstring möchte ich nur einmal eingeben, da hilft nur ein wenig Makro-Zauberei. Und als Sahnehäubchen ein wenig RTTI.</p>
<p>Aver wenn TyRoXx' Kniff erstmal das ist, was Keldan suchte, ist für mich die Welt in Ordnung. Muß ja nicht alles auf einmal sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744759</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 17 Jul 2009 11:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Fri, 17 Jul 2009 12:43:13 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Prototype_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Prototype_pattern</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744813</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 17 Jul 2009 12:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt erstellen wenn der Klassenname Variabel ist? on Fri, 17 Jul 2009 18:32:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a>: Falls das auf die Diskussion über TyRoXx's Vorschlag bezogen ist...</p>
<p>Das Prototype Pattern ist was anderes. Da geht's um das Klonen von Objekten <em>einer</em> Klasse.</p>
<p>Der Code den TyRoXx gepostet hat klont aber nicht. Dazu müsste er den Copy-Ctor verwenden, was er nicht tut. Davon abgesehen sollte die Methode dann wohl &quot;clone&quot; und nicht &quot;create&quot; heissen. Und die Bedingung <em>eine Klasse</em> trifft auch nicht zu...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745002</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Jul 2009 18:32:20 GMT</pubDate></item></channel></rss>