<?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[Singleton-Template zur einfachen Verwendung gesucht]]></title><description><![CDATA[<p>Ich habe versucht eine einfache Singleton-Basisklasse zu erstellen, die man verwenden kann um bestimme Klassen als Singleton zu erstellen.<br />
Allerdings lässt sich trotzdem eine normale Instanz erstellen. Wie kann ich das umgehen ohne dass ich in Foo den Ctor private deklarieren muss?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class T&gt;
class Singleton
{
public:
	static T&amp; Handle()
	{
		static T instance;
		return instance;
	}
protected:
	Singleton() {}
private:
	Singleton(const Singleton&amp;);
	Singleton&amp; operator=(const Singleton&amp;);
};

class Foo : public Singleton&lt;Foo&gt;
{
public:
	void Bar() { std::cout &lt;&lt; &quot;Hallo Welt!&quot; &lt;&lt; std::endl; }
};

int main()
{
	Foo::Handle().Bar();
	Foo foo; // Sollte einen Fehler bewirken!
	foo.Bar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/237764/singleton-template-zur-einfachen-verwendung-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 10:01:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237764.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Apr 2009 15:34:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton-Template zur einfachen Verwendung gesucht on Wed, 01 Apr 2009 15:34:48 GMT]]></title><description><![CDATA[<p>Ich habe versucht eine einfache Singleton-Basisklasse zu erstellen, die man verwenden kann um bestimme Klassen als Singleton zu erstellen.<br />
Allerdings lässt sich trotzdem eine normale Instanz erstellen. Wie kann ich das umgehen ohne dass ich in Foo den Ctor private deklarieren muss?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class T&gt;
class Singleton
{
public:
	static T&amp; Handle()
	{
		static T instance;
		return instance;
	}
protected:
	Singleton() {}
private:
	Singleton(const Singleton&amp;);
	Singleton&amp; operator=(const Singleton&amp;);
};

class Foo : public Singleton&lt;Foo&gt;
{
public:
	void Bar() { std::cout &lt;&lt; &quot;Hallo Welt!&quot; &lt;&lt; std::endl; }
};

int main()
{
	Foo::Handle().Bar();
	Foo foo; // Sollte einen Fehler bewirken!
	foo.Bar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1689388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689388</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 01 Apr 2009 15:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Template zur einfachen Verwendung gesucht on Wed, 01 Apr 2009 15:53:07 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Ich habe versucht eine einfache Singleton-Basisklasse zu erstellen, die man verwenden kann um bestimme Klassen als Singleton zu erstellen.<br />
Allerdings lässt sich trotzdem eine normale Instanz erstellen. Wie kann ich das umgehen ohne dass ich in Foo den Ctor private deklarieren muss?</p>
</blockquote>
<p>Ich würde sagen garnicht. Eine Singleton existiert ja nur einmal, und genau da liegt dein Problem von Foo lassen sich beliebig viele Instanzen erstellen. Da Foo selbst auch noch von Singleton erbt und der Konstruktor Protectet ist erstellt es sich jedesmal eine eigene Singleton. Wenn du so ein Konzept verfolgen willst mußt du in Foo Konstruktor,Copykonstruktor und Operator= genau wie in Singleton private machen. Die Konstruktion des Objekts von Foo würde ja für dich der Aufruf Foo::Handle() erledigen. Sofern du aber in Singleton keine speziellen Maßnahmen ergreifen willst würde ich Singleton ganz weglassen und das Konzept in Foo integrieren da alles bis auf die static Funktion in Foo ja auch vorhanden sein muß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689404</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Wed, 01 Apr 2009 15:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Template zur einfachen Verwendung gesucht on Wed, 01 Apr 2009 16:04:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Foo : public Singleton&lt;Foo&gt; 
{ 
friend template &lt;typename T&gt; Singleton &lt;T&gt;;

private:
    Foo() {}
public: 
    void Bar() { std::cout &lt;&lt; &quot;Hallo Welt!&quot; &lt;&lt; std::endl; } 
};
</code></pre>
<p>bei der friend-syntax bin ich mir net sicher - muss ich selbst immer in allen möglichen reihenfolgen probieren, weil ichs so selten brauch <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689411</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 01 Apr 2009 16:04:03 GMT</pubDate></item></channel></rss>