<?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[Kombinierung von Templates, Factories und Singletons]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich breche mir hier gerade das Gehirn bei dem Versuch, eine SharedMem-Klasse zu implementieren.</p>
<p>Also:<br />
Ich habe ein SharedMem-Klassentemplate, welches<br />
1. die Mutexe für den Zugriff auf den SharedMem verwaltet.<br />
2. beliebige Datentypen als SharedMem aufnehmen kann.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class MutexSharedMem {
private:
	pthread_mutex_t signalMutex;
	pthread_mutex_t memMutex;
	T* data;
public:
	MutexSharedMem();
	MutexSharedMem(T*);
	virtual ~MutexSharedMem();
	T *read();
	void write(T*);
};
</code></pre>
<p>Von diesem SharedMem des jeweiligen Typs soll nur ein Objekt existieren. Dies wollte ich mit einer Factory-Klasse erledigen.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class MutexFactory {
private:

protected:
	MutexSharedMem&lt;T&gt; *sharedMem;
public:
	MutexFactory();
	virtual ~MutexFactory();
	MutexSharedMem&lt;T&gt;* create();
};
</code></pre>
<p>Als Alternative bietet sich ein Singleton-Muster an, allerdings klappt das alles ganz und gar nicht. Wie kriege ich hin, daß vom SharedMem jeweils nur eine Instanz existiert?</p>
<p>Sobald ich Zeiger auf die Daten verwende, kann ich keine statischen Member-Variablen mehr benutzen.</p>
<p>Ich weiß nicht mehr weiter... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252345/kombinierung-von-templates-factories-und-singletons</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 16:16:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252345.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Oct 2009 15:28:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kombinierung von Templates, Factories und Singletons on Sun, 18 Oct 2009 15:28:53 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich breche mir hier gerade das Gehirn bei dem Versuch, eine SharedMem-Klasse zu implementieren.</p>
<p>Also:<br />
Ich habe ein SharedMem-Klassentemplate, welches<br />
1. die Mutexe für den Zugriff auf den SharedMem verwaltet.<br />
2. beliebige Datentypen als SharedMem aufnehmen kann.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class MutexSharedMem {
private:
	pthread_mutex_t signalMutex;
	pthread_mutex_t memMutex;
	T* data;
public:
	MutexSharedMem();
	MutexSharedMem(T*);
	virtual ~MutexSharedMem();
	T *read();
	void write(T*);
};
</code></pre>
<p>Von diesem SharedMem des jeweiligen Typs soll nur ein Objekt existieren. Dies wollte ich mit einer Factory-Klasse erledigen.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class MutexFactory {
private:

protected:
	MutexSharedMem&lt;T&gt; *sharedMem;
public:
	MutexFactory();
	virtual ~MutexFactory();
	MutexSharedMem&lt;T&gt;* create();
};
</code></pre>
<p>Als Alternative bietet sich ein Singleton-Muster an, allerdings klappt das alles ganz und gar nicht. Wie kriege ich hin, daß vom SharedMem jeweils nur eine Instanz existiert?</p>
<p>Sobald ich Zeiger auf die Daten verwende, kann ich keine statischen Member-Variablen mehr benutzen.</p>
<p>Ich weiß nicht mehr weiter... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1794259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1794259</guid><dc:creator><![CDATA[danowar]]></dc:creator><pubDate>Sun, 18 Oct 2009 15:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kombinierung von Templates, Factories und Singletons on Sun, 18 Oct 2009 17:50:41 GMT]]></title><description><![CDATA[<p>Eine möglichkeit wäre, deine MutexSharedMem Klasse von einer nicht-template Klasse zu vererben und MutexFactory eine Liste aus einzelnen Instanzen verwalten zu lassen:</p>
<pre><code class="language-cpp">class MutexSharedMemBase
{
protected:
    pthread_mutex_t signalMutex;
    pthread_mutex_t memMutex;
};

template&lt;class T&gt;
class MutexSharedMem : public MutexSharedMemBase {
private:
    T* data;
    MutexSharedMem();
    MutexSharedMem(T*);
public:
    virtual ~MutexSharedMem();
    T *read();
    void write(T*);
    friend class MutexFactory;
};

class MutexFactory {
protected:
    std::map&lt;std::string, MutexSharedMemBase*&gt; sharedMem;
public:
    MutexFactory();
    virtual ~MutexFactory();

    template &lt;class T&gt;
    MutexSharedMemBase* create()
    {
        std::map&lt;std::string, MutexSharedMemBase*&gt;::const_iterator it = sharedMem.find(typeid(T).name());
        if (it != sharedMem.end()) return it-&gt;second;
        MutexSharedMemBase* result = new MutexSharedMem&lt;T&gt;();
        sharedMem.insert(std::make_pair(typeid(T).name(), result));
        return result;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1794350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1794350</guid><dc:creator><![CDATA[CppCoder]]></dc:creator><pubDate>Sun, 18 Oct 2009 17:50:41 GMT</pubDate></item></channel></rss>