<?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[den template-typ für eine template methode durch mehrere klassen durchschleifen.]]></title><description><![CDATA[<p>da es sehr häufig vorkommt, wenn man von einer basis-klasse ableitet, dass man dann andere klassen auch noch überschreiben muss, möchte ich mir hier irgendwie abhelfen.<br />
mir ist klar, wenn ich das unten stehende beispiel in eine template-klasse umwandle, dass man dies rasch lösen kann, jedoch möchte ich das nicht, weil dies bei div. verschachtelten ableitungen wieder zu einem problem werden könnte bzw. ich nicht dann wieder eine template-klasse erzeugen möchte.</p>
<p>hier mal das beispiel, welches sicher Syntaktisch falsch ist, jedoch meine absicht erklären soll:</p>
<pre><code class="language-cpp">class ElemClass
{

	public:
		std::string elemName;
	public:
		ElemClass() {}
		virtual ~ElemClass() {}

//	weitere virtuelle methoden
};

class ElemCreator
{
	protected:
		typename elem_;
	public:
		ElemCreator(typename elem=Elem) : elem_(elem) {}
		virtual ~ElemCreator(){}

		ElemClass CreateElem() {return new elem_;}
};

class MyClass
{
	protected:
		ElemCreator elemCreator_;
	public:	
		ElemCreator(typename elem=Elem) : elemCreator_(elem){}
		virtual ~ElemCreator(){}

};
</code></pre>
<p>nun möchte ich ich ElemClass erweitern. damit ich aber nicht auch noch ElemCreator überschreiben muss, meine typnename members.</p>
<pre><code class="language-cpp">class ElemClassDetail : public ElemClass
{
	public:
		int elemValue;
	public:
		ElemClassDetail() {}
		virtual ~ElemClassDetail() {}

//	weitere überschriebene virtuelle methoden

};

MyClass myclass(ElemClassDetail);
myclass.elemCreator_.ElemCreator();
</code></pre>
<p>ich bin mir nicht sicher, ob ich mit diesem beispiel mein problem schildern konnte, jedoch geht es mir einfach darum, dass ich so weit es geht template-klassen vermeiden möchte.</p>
<p>DANKE<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210178/den-template-typ-für-eine-template-methode-durch-mehrere-klassen-durchschleifen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 10:36:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210178.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Apr 2008 07:41:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to den template-typ für eine template methode durch mehrere klassen durchschleifen. on Tue, 08 Apr 2008 07:41:51 GMT]]></title><description><![CDATA[<p>da es sehr häufig vorkommt, wenn man von einer basis-klasse ableitet, dass man dann andere klassen auch noch überschreiben muss, möchte ich mir hier irgendwie abhelfen.<br />
mir ist klar, wenn ich das unten stehende beispiel in eine template-klasse umwandle, dass man dies rasch lösen kann, jedoch möchte ich das nicht, weil dies bei div. verschachtelten ableitungen wieder zu einem problem werden könnte bzw. ich nicht dann wieder eine template-klasse erzeugen möchte.</p>
<p>hier mal das beispiel, welches sicher Syntaktisch falsch ist, jedoch meine absicht erklären soll:</p>
<pre><code class="language-cpp">class ElemClass
{

	public:
		std::string elemName;
	public:
		ElemClass() {}
		virtual ~ElemClass() {}

//	weitere virtuelle methoden
};

class ElemCreator
{
	protected:
		typename elem_;
	public:
		ElemCreator(typename elem=Elem) : elem_(elem) {}
		virtual ~ElemCreator(){}

		ElemClass CreateElem() {return new elem_;}
};

class MyClass
{
	protected:
		ElemCreator elemCreator_;
	public:	
		ElemCreator(typename elem=Elem) : elemCreator_(elem){}
		virtual ~ElemCreator(){}

};
</code></pre>
<p>nun möchte ich ich ElemClass erweitern. damit ich aber nicht auch noch ElemCreator überschreiben muss, meine typnename members.</p>
<pre><code class="language-cpp">class ElemClassDetail : public ElemClass
{
	public:
		int elemValue;
	public:
		ElemClassDetail() {}
		virtual ~ElemClassDetail() {}

//	weitere überschriebene virtuelle methoden

};

MyClass myclass(ElemClassDetail);
myclass.elemCreator_.ElemCreator();
</code></pre>
<p>ich bin mir nicht sicher, ob ich mit diesem beispiel mein problem schildern konnte, jedoch geht es mir einfach darum, dass ich so weit es geht template-klassen vermeiden möchte.</p>
<p>DANKE<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488339</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Tue, 08 Apr 2008 07:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to den template-typ für eine template methode durch mehrere klassen durchschleifen. on Tue, 08 Apr 2008 16:43:56 GMT]]></title><description><![CDATA[<p>Sorry, aber aus deiner Beschreibung werde ich nicht richtig schlau...</p>
<p>Wenn du einfach nur eine Creator-Klasse brauchst, dann sieh dir mal das Factory - Design-Pattern an (einfach mal danach suchen, hab jetzt gerade keinen Link).</p>
<p>Um generell Typen zu erzeugen, könntest du folgende Template-Methode deklarieren:</p>
<pre><code class="language-cpp">class ElemCreator
{
  template&lt;typename T&gt;
  T* Create() { return new T(); } // evtl. sogar als static deklarieren
</code></pre>
<p>Aufruf dann z.B. so:</p>
<pre><code class="language-cpp">ElemCreator creator;
ElemClassDetail *elem = creator.Create&lt;ElemClassDetail&gt;();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1488641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488641</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 08 Apr 2008 16:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to den template-typ für eine template methode durch mehrere klassen durchschleifen. on Wed, 09 Apr 2008 06:07:46 GMT]]></title><description><![CDATA[<p>danke für die antwort!</p>
<p>nein um das create an sich geht es nicht, sondern &quot;nur&quot; um das durchschleifen des types, welches dann beim create übergeben wird.<br />
ich möchte nicht unbedingt aus myclass eine template klasse machen, jedoch möchte ich zb. im myclass-konstruktor angeben können welche abgeleitete klasse von Elem für das ElemCreator::CreateElem verwendet werden soll (deshalb der &quot;memeber&quot; typename elem_ in ElemCreator)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488826</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Wed, 09 Apr 2008 06:07:46 GMT</pubDate></item></channel></rss>