<?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[Factory-Klassen]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>mein fragen:</p>
<p>Man kann von factoryklassen ja objekte von klassen erstellen, die von einer basisklasse abgeleitet werden oder?!</p>
<pre><code class="language-cpp">class base
{};
class member1:public base
{};

class member2:public base
{};

class factory
{
 base* MakeIt(const string&amp; classname)
 {
 if(classname == &quot;member1)
    return new member1();
 else
   return new member2();
};
</code></pre>
<p>kann man auch eine factory schreiben, die verschiedenene (nicht abgeleitete klassen) zurückgibt?</p>
<p>wenn ja wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140795/factory-klassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 08:55:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140795.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Mar 2006 12:28:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 12:28:18 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>mein fragen:</p>
<p>Man kann von factoryklassen ja objekte von klassen erstellen, die von einer basisklasse abgeleitet werden oder?!</p>
<pre><code class="language-cpp">class base
{};
class member1:public base
{};

class member2:public base
{};

class factory
{
 base* MakeIt(const string&amp; classname)
 {
 if(classname == &quot;member1)
    return new member1();
 else
   return new member2();
};
</code></pre>
<p>kann man auch eine factory schreiben, die verschiedenene (nicht abgeleitete klassen) zurückgibt?</p>
<p>wenn ja wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018211</guid><dc:creator><![CDATA[sjhasds]]></dc:creator><pubDate>Fri, 17 Mar 2006 12:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 12:36:21 GMT]]></title><description><![CDATA[<blockquote>
<p>kann man auch eine factory schreiben, die verschiedenene (nicht abgeleitete klassen) zurückgibt?</p>
</blockquote>
<p>Kann man, aber natürlich nicht beliebig viele. Außerdem muss der Aufrufer in diesem Fall natürlich auch einen konkreteren Typ kennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018225</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 17 Mar 2006 12:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 12:53:28 GMT]]></title><description><![CDATA[<p>und wie würde das aussehen?</p>
<p>da brauch ich ja für jeden typ eine eigene funktion oder?</p>
<p>ein beispiel wäre vielleicht super?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018249</guid><dc:creator><![CDATA[sjhasds]]></dc:creator><pubDate>Fri, 17 Mar 2006 12:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 13:54:39 GMT]]></title><description><![CDATA[<p>kann ich hier auch Fragen zu anderen Klassen stellen ?<br />
will mich net verposten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1018318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018318</guid><dc:creator><![CDATA[KroqGar]]></dc:creator><pubDate>Fri, 17 Mar 2006 13:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 14:03:29 GMT]]></title><description><![CDATA[<p>habs so versucht, geht aber nicht..</p>
<pre><code class="language-cpp">class Base
{
  public:
  virtual void WhoIAm(){cout&lt;&lt;&quot;Base&quot;&lt;&lt;endl;}
};

class Member1:public Base
{
  public:
  void WhoIAm(){cout&lt;&lt;&quot;Member1&quot;&lt;&lt;endl;}
};

class Member2:public Base
{
 public:
 void WhoIAm(){cout&lt;&lt;&quot;Base2&quot;&lt;&lt;endl;}
};

class Base2
{
public:
 void WhoIAm(){cout&lt;&lt;&quot;Base2&quot;&lt;&lt;endl;}
};

template&lt;class T&gt;
class Factory
{
 public:

 T* ReturnIt(const string&amp; ClassName)
 {
  if(ClassName == &quot;Base&quot;)
   return new Base;
  else if(ClassName == &quot;Base2&quot;)
   return new Base2;
  else if(ClassName == &quot;Member1&quot;)
   return new Member1;
  else
   return new Member2;
 }
};
int main(int argc, char* argv[])
{
  Base* p;
  Factory&lt;Base&gt; BaseFactory;
  Factory&lt;Base2&gt; Base_Factory;
  p = BaseFactory.ReturnIt(&quot;Member1&quot;);
  p-&gt;WhoIAm();
  getch();

        return 0;
}
</code></pre>
<p>wie kann ich das richtig machen?<br />
und vorallem, wo lösch ich den zeiger? in der main mit delete p?;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018328</guid><dc:creator><![CDATA[sjhasds]]></dc:creator><pubDate>Fri, 17 Mar 2006 14:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 14:45:43 GMT]]></title><description><![CDATA[<p>Kauf dir das Buch &quot;Modernes C++ Design&quot;, da steht ne geniale Factory-Implementierung drin. Damit kannste sogar einen Plugin-Mechanismus bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018403</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 17 Mar 2006 14:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Fri, 17 Mar 2006 14:46:56 GMT]]></title><description><![CDATA[<p>ja werd ich viell machen, brauch aber jetzt nur diese eine lösung... <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/1018404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018404</guid><dc:creator><![CDATA[sjhasd]]></dc:creator><pubDate>Fri, 17 Mar 2006 14:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to Factory-Klassen on Sat, 18 Mar 2006 11:37:09 GMT]]></title><description><![CDATA[<p>Was soll der Sinn davon sein?</p>
<p>Wenn du nichts gegen void-Zeiger hast dann ist es möglich.</p>
<p>In etwa</p>
<pre><code class="language-cpp">struct BaseCreator
{
   virtual void* create() = 0;
};

class Factory
{
   /// int ist der ID-Typ
   typedef std::map&lt;int, BaseCreator*&gt; CreatorMap;
...
};

template &lt;class T&gt;
struct Creator : BaseCreator
{
   void* create()
   {
      return (void*)new T;
   }
};

template &lt;class CreatorT, int ID&gt;
struct Registrator 
{
    Registrator()
   {  Factory::register(ID, new CreatorT); }
};

// Das hier nicht vergessen.
Registrator&lt;1, Creator&lt;int&gt; &gt; regInt;
Registrator&lt;2, Creator&lt;float&gt; &gt; regFloat;
</code></pre>
<p>Eine Lösung ohne void* gibt es imho nicht.<br />
Den Creator könnte man auch als lokale Klasse innerhalb Registrator() erstellen.</p>
<p>Das ganze ist übrigens ungetestet. <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/1018905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018905</guid><dc:creator><![CDATA[nur void*]]></dc:creator><pubDate>Sat, 18 Mar 2006 11:37:09 GMT</pubDate></item></channel></rss>