<?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[Multiton? (Singleton Variante)]]></title><description><![CDATA[<p>Was haltet ihr von folgendem Gebilde:</p>
<p>Zur Erinnerung, ein (einfaches) Singleton sieht ungefähr so aus:</p>
<pre><code class="language-cpp">class Singleton {
public:
	//! gibt Singleton-Instanz zurueck
	Singleton&amp; getSingleton() {
		static Singleton singleton;
		return singleton;
	}

private:
	//! Konstruktor
	Singleton() { }

	//! Destruktor
	~Singleton() { }
};
</code></pre>
<p>Für meine Anwendung (eine Grafikengine für die Uni) will ich mir nicht die Möglichkeit verbauen mehrere Engines gleichzeitig laufen zulassen. Zum Beispiel wäre es schön, wenn man neben dem eigentlichen Spiel auch noch ein Menü, das mit der selben Engine läuft, hätte (in vielen Spielen läuft ja z.B. eine gescriptete Szene im Hintergrund). Oder die Möglichkeit mehrere Unterschiedliche Schauplätze zu haben, ich denke Anwendungen gibt es zu hauf...</p>
<p>Meine Idee ist es, das Singleton so zu erweitern, dass es mehrere Instanzen geben kann. Wenn man also die Instanz des Spiels braucht ruft man getSingleton(GAME) auf. Wenn man dagegen das Menü braucht ruft man getSingleton(MENU) auf, usw...<br />
Dabei sind GAME bzw. MENU einfach nur Konstanten (oder Enum etc.)<br />
Wird getSingleton() mit einer Konstante aufgerufen für die es noch keine Instanz gibt wird eine neue erzeugt. Ansonsten wird die bestehende zurückgegeben.</p>
<p>Vermutlich widerspricht das ziemlich dem Singleton-Konzept, daher hab ich es mal Multiton getauft. (falls das schon einen Namen hat, dann sagt ihn mir bitte <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>Also was haltet ihr von diesem Multiton? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>mfg,<br />
Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121131/multiton-singleton-variante</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 15:59:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121131.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Sep 2005 09:58:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 09:58:46 GMT]]></title><description><![CDATA[<p>Was haltet ihr von folgendem Gebilde:</p>
<p>Zur Erinnerung, ein (einfaches) Singleton sieht ungefähr so aus:</p>
<pre><code class="language-cpp">class Singleton {
public:
	//! gibt Singleton-Instanz zurueck
	Singleton&amp; getSingleton() {
		static Singleton singleton;
		return singleton;
	}

private:
	//! Konstruktor
	Singleton() { }

	//! Destruktor
	~Singleton() { }
};
</code></pre>
<p>Für meine Anwendung (eine Grafikengine für die Uni) will ich mir nicht die Möglichkeit verbauen mehrere Engines gleichzeitig laufen zulassen. Zum Beispiel wäre es schön, wenn man neben dem eigentlichen Spiel auch noch ein Menü, das mit der selben Engine läuft, hätte (in vielen Spielen läuft ja z.B. eine gescriptete Szene im Hintergrund). Oder die Möglichkeit mehrere Unterschiedliche Schauplätze zu haben, ich denke Anwendungen gibt es zu hauf...</p>
<p>Meine Idee ist es, das Singleton so zu erweitern, dass es mehrere Instanzen geben kann. Wenn man also die Instanz des Spiels braucht ruft man getSingleton(GAME) auf. Wenn man dagegen das Menü braucht ruft man getSingleton(MENU) auf, usw...<br />
Dabei sind GAME bzw. MENU einfach nur Konstanten (oder Enum etc.)<br />
Wird getSingleton() mit einer Konstante aufgerufen für die es noch keine Instanz gibt wird eine neue erzeugt. Ansonsten wird die bestehende zurückgegeben.</p>
<p>Vermutlich widerspricht das ziemlich dem Singleton-Konzept, daher hab ich es mal Multiton getauft. (falls das schon einen Namen hat, dann sagt ihn mir bitte <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>Also was haltet ihr von diesem Multiton? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>mfg,<br />
Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876402</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 09:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:03:24 GMT]]></title><description><![CDATA[<p>nicht viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876404</guid><dc:creator><![CDATA[volkar]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:03:24 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:04:36 GMT]]></title><description><![CDATA[<p>Ich verstehe das nicht. Wozu brauchst du ne andere Instanz der Engine um das Menü zu zeichnen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876405</guid><dc:creator><![CDATA[ursel]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:13:38 GMT]]></title><description><![CDATA[<p>verstehe das auch nicht so ganz (sinn)<br />
meinst du sowas?</p>
<pre><code class="language-cpp">class Engine : public Singleton
{
    public:
        Menu *GetMenu() { return menu; }

    private:
        Menu    menu;
};

int main()
{
    Engine engine;
    Menu *p = engine.GetMenu();
}
</code></pre>
<p>ziemlich einfaches beispiel aber somit könntest du auch gewährleisten das es nur ein menü existiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876412</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:14:04 GMT]]></title><description><![CDATA[<blockquote>
<p>nicht viel.</p>
</blockquote>
<p>Argumente?</p>
<blockquote>
<p>Wozu brauchst du ne andere Instanz der Engine um das Menü zu zeichnen?</p>
</blockquote>
<p>Dadurch könnte das Hauptmenü während des Spiels im Speicher bleiben und ich kann während das Spiel läuft (bzw. noch im Speicher ist) im Hauptmenü sein. Ich kann also ohne nachladen umschalten. Besonders wichtig ist das wenn z.B. ein Strategiespiel an verschiedenen Schauplätzen (z.B. Planeten) stattfindet. Man könnte also ohne laden hin- und herschalten. (ggf. ein paar Sachen nachladen wenn der Speicher nicht reicht, aber zumindest ohne alles komplett neu zu initialisieren)</p>
<p>Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876413</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:14:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:19:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/417">@miller_m</a>:<br />
Ja ginge auch, aber dann müsste ich das in der Grafikengine hardcoden. Die Grafikengine soll aber möglichst universell sein. Daher diese Konstanten.<br />
Intern ist das dann einfach ein statischer Vektor, eine Map o.ä....</p>
<p>Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876421</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:25:30 GMT]]></title><description><![CDATA[<p>machs doch ganz normal wie es jeder machen würde</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876429</guid><dc:creator><![CDATA[standar1]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:26:19 GMT]]></title><description><![CDATA[<p>wäre dann eine art factory?!?!? die halt nur eine instanz rausrückt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876430</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:26:58 GMT]]></title><description><![CDATA[<blockquote>
<p>wie es jeder machen würde</p>
</blockquote>
<p>Und wie würde es jeder machen? <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=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/876431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876431</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:31:32 GMT]]></title><description><![CDATA[<p>Also eine Factory ist was anderes....</p>
<p>...aber ich merke schon an eueren Reaktionen, dass meine Idee wohl ziemlicher Müll sein muss <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="😃"
    /> Ich denke ich werd es dann auf die konventionelle Art machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876436</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 10:40:52 GMT]]></title><description><![CDATA[<p>Coolcat schrieb:</p>
<blockquote>
<p>Also eine Factory ist was anderes....</p>
</blockquote>
<p>wieso du brauchst halt eine basisklasse.<br />
halten könntest du zb: in einer map&lt;enum, basisklasse*&gt; bei einem zugriff wird das objekt erstellt und zurückgegeben falls schon eine instanz vorhanden ist wird diese zurückgegeben. bin ich jetzt so annährend richtig was du dir vorstellst?<br />
du könntest mir allerdings noch dein universell erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876441</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 20 Sep 2005 10:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 11:25:43 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/417">@miller_m</a>:<br />
Also ja du bist nah dran... <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="😉"
    /> Thx das du dir mühe gibst mich zu verstehen... <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>Ich verstehe ich dich jetzt so, das du ein extra Menu und ein Game von Engine ableitest.<br />
Also da alle Instanzen (also für GAME, MENU, usw.) identisch sind brauch ich ja nicht von einer Basisklasse &quot;Engine&quot; ableiten.<br />
Mit universell meine ich eben genau dies. Also die Klasse ist so universell, dass man damit sowohl das Spiel selbst als auch das Menü machen kann.</p>
<p>Es wäre dann eine Factory, die nur Objekte vom Typ Engine erzeugt. (was dann keine Factory in dem Sinne mehr ist, vorallem, weil die Factory in die Klasse Engine eingebaut wäre)</p>
<p>Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876495</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 11:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 11:40:36 GMT]]></title><description><![CDATA[<p>Coolcat schrieb:</p>
<blockquote>
<p>Ich verstehe ich dich jetzt so, das du ein extra Menu und ein Game von Engine ableitest.</p>
</blockquote>
<p>irgendwie so etwas, sprich von einer schnittstelle die vernünftig ist. blos nicht von engine halt.</p>
<pre><code class="language-cpp">class EngineObj; // virtuelle basisklasse
class Menu : public EngineObj;
// usw
class Engine
{
    map&lt;enum, EngineObj*&gt; objlst;

    public:
        EngineObj *get(enum) { }
};
</code></pre>
<p>Coolcat schrieb:</p>
<blockquote>
<p>Also da alle Instanzen (also für GAME, MENU, usw.) identisch sind brauch ich ja nicht von einer Basisklasse &quot;Engine&quot; ableiten.</p>
</blockquote>
<p>aber könntest du sie in einem container speichern.<br />
game hat nichts mit der engine zu tun. zwischen game und engine sollte eine klare trennung sein.</p>
<p>[edit]<br />
tags</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876520</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 20 Sep 2005 11:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 12:20:40 GMT]]></title><description><![CDATA[<blockquote>
<p>game hat nichts mit der engine zu tun.</p>
</blockquote>
<p>Hä? <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=":confused:"
      alt="😕"
    /><br />
Warum kann GAME (bzw. genauso MENU) nicht einfach eine Instanz von Engine sein die für das Spiel zuständig ist?</p>
<p>Ich meine das ungefähr so:</p>
<pre><code class="language-cpp">class Multiton {
public:
    Multiton&amp; getMultiton(int typ) {
        Multiton* mt = mtMap[typ];
        if (mt) { return *mt; }
        mt = new Multiton();
        mtMap[typ] = mt; 
        return *mt;
    }

private:
    static map&lt;int,Multiton*&gt; mtMap;

    //! Konstruktor
    Multiton() { }

    //! Destruktor
    ~Multiton() { }

    //! alles freigeben, was in mtMap ist...
    static void destruct() { /*...*/ } 
};
</code></pre>
<p>Edit: ^^ Tippfehler im Quellcode <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/876567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876567</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 12:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 19:05:46 GMT]]></title><description><![CDATA[<p>Coolcat schrieb:</p>
<blockquote>
<p>Warum kann GAME (bzw. genauso MENU) nicht einfach eine Instanz von Engine sein die für das Spiel zuständig ist?</p>
</blockquote>
<p>ist vermutlich eine streit frage, aber für ist es so das game die engine als schnittstelle benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876584</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 20 Sep 2005 19:05:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 19:28:08 GMT]]></title><description><![CDATA[<p>ok, mag sein</p>
<p>also ich sag erstmal thx@all, ich werde nochmal etwas über dem Design grübeln.... <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>Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876605</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 19:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 19:55:54 GMT]]></title><description><![CDATA[<p>Machs wie alle Engines und implementier nen Szenenmanager, dann kannste im Spiel verschiedene Szenenmanager verwenden je nach Status deines Spiels.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876623</guid><dc:creator><![CDATA[User---]]></dc:creator><pubDate>Tue, 20 Sep 2005 19:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 20:22:41 GMT]]></title><description><![CDATA[<p>und wo genau ist der vorteil von dem hier:</p>
<pre><code class="language-cpp">//hier tolle globale enums:

[...]

  getSingleton(GAME);
  getSingleton(MENU);
</code></pre>
<p>gegenüber dem hier:</p>
<pre><code class="language-cpp">//tolle, globale variablen
engine game,menu;

[...]

  game;
  menu;
</code></pre>
<p><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=":confused:"
      alt="😕"
    /></p>
<p>ist imho beides nicht so prall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876639</guid><dc:creator><![CDATA[gueststar]]></dc:creator><pubDate>Tue, 20 Sep 2005 20:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to Multiton? (Singleton Variante) on Tue, 20 Sep 2005 21:32:31 GMT]]></title><description><![CDATA[<p>@gueststar:<br />
Saug dir hier (legal) das erste Kapitel von &quot;Game Programming Gems 1&quot;<br />
<a href="http://www.edv-buchversand.de/mitp/chapter.php?cnt=chapter&amp;id=itp-0923&amp;lng=" rel="nofollow">http://www.edv-buchversand.de/mitp/chapter.php?cnt=chapter&amp;id=itp-0923&amp;lng=</a><br />
(ca. 600 kb)</p>
<p>Und schau dir dann mal Seite 10ff und 32ff an.<br />
Das Buch ist auch sonst sicher interesant...</p>
<p>Coolcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876679</guid><dc:creator><![CDATA[Coolcat]]></dc:creator><pubDate>Tue, 20 Sep 2005 21:32:31 GMT</pubDate></item></channel></rss>