<?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[Klasse nur durch Namen erzeugen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe wirklich schon die FAQ und die Suche bemüht, aber wohl die falschen Stichworte benutzt weil ich zu diesem &quot;Standardthema&quot; nichts finden konnte: RTTI und so weiter <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>Meine Frage lautet jedenfalls:</p>
<p>Wie kann ich ein Objekt erzeugen, wenn ich nur den Namen der Klasse als String verfügbar habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/137362/klasse-nur-durch-namen-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 17:52:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137362.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Feb 2006 20:48:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Thu, 16 Feb 2006 20:48:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe wirklich schon die FAQ und die Suche bemüht, aber wohl die falschen Stichworte benutzt weil ich zu diesem &quot;Standardthema&quot; nichts finden konnte: RTTI und so weiter <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>Meine Frage lautet jedenfalls:</p>
<p>Wie kann ich ein Objekt erzeugen, wenn ich nur den Namen der Klasse als String verfügbar habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996227</guid><dc:creator><![CDATA[lizardking]]></dc:creator><pubDate>Thu, 16 Feb 2006 20:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Thu, 16 Feb 2006 20:53:20 GMT]]></title><description><![CDATA[<p>Mithilfe des <a href="http://de.wikipedia.org/wiki/Factory-Pattern" rel="nofollow">Factory-Patterns</a>. Ohne das gehts nicht.</p>
<p>/edit Klasse != Objekt! Der Threadname ist irreführend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996231</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 16 Feb 2006 20:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Thu, 16 Feb 2006 20:53:44 GMT]]></title><description><![CDATA[<p>Ist nicht möglich, du kannst dir höchstens ne Funktion schreiben, welche nen String nimmt und das Objekt dann erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996234</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 16 Feb 2006 20:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Fri, 17 Feb 2006 07:21:43 GMT]]></title><description><![CDATA[<p>Noch ein Stichwort für weitere Suchen: &quot;virtueller Konstruktor&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996366</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 17 Feb 2006 07:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Fri, 17 Feb 2006 07:55:42 GMT]]></title><description><![CDATA[<p>Tut mir leid das ich mich missverständlich ausgedrückt habe. Bin halt noch ein Anfänger in Sachen Programmierung <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>Mein konkretes Problem sieht so aus:<br />
Ich lese aus einer Textdatei bestimmt Klassennamen und will diese dann instantieren. Bislang habe ich eine große IF-ELSE-Kaskadierung die sehr unhübsch ist. Auch wenn eine neue Klasse hinzukommt, muß der IF-ELSE-Baum angepasst werden.</p>
<p>Wenn ich die Fabrikmethode verwenden würde, dann hätte ich wieder den gleichen Anpassungsaufwand bei jeder neuen Klasse die hinzukommt.</p>
<p>Meine Vorstellung wäre etwa so:</p>
<pre><code>try
{
 Object o = new &quot;Derived1&quot;;
} catch...
</code></pre>
<p>Wenn die Klasse nicht vorhanden ist, wird das durch den Catch gefangen.<br />
Wäre eventuell eine Überladung des new-Operators der richtige Ansatzpunkt?</p>
<p>Vielleicht geht das aber in C++ auch gar nicht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/996395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996395</guid><dc:creator><![CDATA[lizardking]]></dc:creator><pubDate>Fri, 17 Feb 2006 07:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Fri, 17 Feb 2006 08:10:11 GMT]]></title><description><![CDATA[<p>lizardking schrieb:</p>
<blockquote>
<p>Vielleicht geht das aber in C++ auch gar nicht <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>
</blockquote>
<p>Das haben die obigen Beiträge versucht Dir zu sagen, ja <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>
]]></description><link>https://www.c-plusplus.net/forum/post/996402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996402</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 17 Feb 2006 08:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Fri, 17 Feb 2006 08:10:20 GMT]]></title><description><![CDATA[<p>Nein, in C++ geht das so definitiv nicht (zumal zur Laufzeit die Klassennamen gar nicht mehr existieren)- da bleibt als beste Alternative wirklich nur eine Factory-Methode (notfalls kannst du ja eine map anlegen, in der jede abgeleitete Klasse sich mit Name und Create-Methode anmeldet:</p>
<pre><code class="language-cpp">class BaseClass
{
public:
  static BaseClass* Create() {return NULL;}
}
typedef map&lt;string,BaseClass* (*)()&gt;Create_Map;
Create_Map Creators;
class Derived1 : public BaseClass
{
  Derived1() { /* init */ };
public:
  static BaseClass* Create() {return new Derived1;}
  static void register() {Creators[&quot;Derived1&quot;]=&amp;Create();
}

BaseClass* CreateByName(const string&amp; name)
{
  Create_Map::iterator pos=Creators.find(name);
  if(pos!=Creators.end())
    return pos-&gt;second();
  else
    //Fehlerbehandlung (throw, return NULL, o.ä.)
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/996403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996403</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 17 Feb 2006 08:10:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse nur durch Namen erzeugen on Fri, 17 Feb 2006 08:55:25 GMT]]></title><description><![CDATA[<p>Bitte einfach mal in die LOKI C++ Library schauen, da ist alles schon fertig. Muß man nur benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/996446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/996446</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 17 Feb 2006 08:55:25 GMT</pubDate></item></channel></rss>