<?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[Von Templateklasse ableiten und Spezialisieren]]></title><description><![CDATA[<p>Hi,</p>
<p>ich will eine Templateklasse erstellen, die von einer andren Templateklasse erbt und diese Spezialisieren mit wiederrum einer Templateklasse.</p>
<pre><code class="language-cpp">//Basisklasse
template&lt;class T&gt;class A
{
public:
	A() { arr=0; len=0; }
	A(const T&amp; val) {
	}
	virtual void Addref(const T&amp; val) {
		//erhöhe
	}
        // noch einiges mehr
protected:
	T** arr;
	unsigned int len;
};

//Hier die Klasse auf die Spezialisiert werden soll, die übrigens auch von
//A abgeleitet wird
template&lt;class T&gt; class B : public A&lt;T&gt;
{
public:
	B():A() { }
	explicit B(const T&amp; val):A(val) { }
        //noch einiges mehr
};

//Jetzt die Spezialisirte Klasse
//Es soll nur der spezialisierter Typ funktionieren, sonst Fehler
template&lt;class T&gt;class C:public A&lt;T&gt;
{
};

template&lt;class T&gt;class C&lt;B&lt;T&gt; &gt;:public A&lt;B&lt;T&gt; &gt;
{
public:
	C(const bool&amp; sort=false):A&lt;B&lt;T&gt; &gt;() { as=sort; }
	C(const B&lt;T&gt;&amp; val,const bool&amp; sort=false):A&lt;B&lt;T&gt; &gt;(val) { as=sort; }
        virtual mb Sort(const bool&amp; sort=as) { //Sortiert }
        //noch andres Zeug
protected:
        bool as;
};
</code></pre>
<p>Und jetzt das eigentliche Problem:</p>
<pre><code class="language-cpp">int main() {
       C&lt;B&lt;unsigned int&gt; &gt; c1;  //Funktioniert
       B&lt;unsigned int&gt; b1;
       B&lt;unsigned short&gt; b2;
       C&lt;B&lt;unsigned int&gt; &gt; c2(b1);//Funktioniert
       C&lt;B&lt;unsigned int&gt; &gt; c3(b2);//Fehler-&gt;soll so sein
       C&lt;B&lt;unsigned int&gt; &gt; c4(55);//Funktioniert zwar, aber warum??&lt;&lt;Problem
//Gelöst, die 88 wird als bool interpretiert
       c4.Addref(66);//geht auch, aber nicht beabsichtigt!
//gelöst durch explicit, jetzt Fehler
};
</code></pre>
<p>Nunja, ist ein solcher Aufbau überhaupt machbar oder muss die ganze A Klasse quasi Spezialisieren(was mir egtl widerstrebt, da es den größen Teil des Codes ausmacht und sowieso nur Copy&amp;Paste wär, weil C ja nur ne Erweiterung von A ist). Vielleicht ist es ja auch die Spezialisierung eines Templates, was hier Probleme bereitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285192/von-templateklasse-ableiten-und-spezialisieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 18:47:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285192.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Apr 2011 23:19:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Von Templateklasse ableiten und Spezialisieren on Fri, 15 Apr 2011 23:57:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich will eine Templateklasse erstellen, die von einer andren Templateklasse erbt und diese Spezialisieren mit wiederrum einer Templateklasse.</p>
<pre><code class="language-cpp">//Basisklasse
template&lt;class T&gt;class A
{
public:
	A() { arr=0; len=0; }
	A(const T&amp; val) {
	}
	virtual void Addref(const T&amp; val) {
		//erhöhe
	}
        // noch einiges mehr
protected:
	T** arr;
	unsigned int len;
};

//Hier die Klasse auf die Spezialisiert werden soll, die übrigens auch von
//A abgeleitet wird
template&lt;class T&gt; class B : public A&lt;T&gt;
{
public:
	B():A() { }
	explicit B(const T&amp; val):A(val) { }
        //noch einiges mehr
};

//Jetzt die Spezialisirte Klasse
//Es soll nur der spezialisierter Typ funktionieren, sonst Fehler
template&lt;class T&gt;class C:public A&lt;T&gt;
{
};

template&lt;class T&gt;class C&lt;B&lt;T&gt; &gt;:public A&lt;B&lt;T&gt; &gt;
{
public:
	C(const bool&amp; sort=false):A&lt;B&lt;T&gt; &gt;() { as=sort; }
	C(const B&lt;T&gt;&amp; val,const bool&amp; sort=false):A&lt;B&lt;T&gt; &gt;(val) { as=sort; }
        virtual mb Sort(const bool&amp; sort=as) { //Sortiert }
        //noch andres Zeug
protected:
        bool as;
};
</code></pre>
<p>Und jetzt das eigentliche Problem:</p>
<pre><code class="language-cpp">int main() {
       C&lt;B&lt;unsigned int&gt; &gt; c1;  //Funktioniert
       B&lt;unsigned int&gt; b1;
       B&lt;unsigned short&gt; b2;
       C&lt;B&lt;unsigned int&gt; &gt; c2(b1);//Funktioniert
       C&lt;B&lt;unsigned int&gt; &gt; c3(b2);//Fehler-&gt;soll so sein
       C&lt;B&lt;unsigned int&gt; &gt; c4(55);//Funktioniert zwar, aber warum??&lt;&lt;Problem
//Gelöst, die 88 wird als bool interpretiert
       c4.Addref(66);//geht auch, aber nicht beabsichtigt!
//gelöst durch explicit, jetzt Fehler
};
</code></pre>
<p>Nunja, ist ein solcher Aufbau überhaupt machbar oder muss die ganze A Klasse quasi Spezialisieren(was mir egtl widerstrebt, da es den größen Teil des Codes ausmacht und sowieso nur Copy&amp;Paste wär, weil C ja nur ne Erweiterung von A ist). Vielleicht ist es ja auch die Spezialisierung eines Templates, was hier Probleme bereitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050041</guid><dc:creator><![CDATA[Marrie]]></dc:creator><pubDate>Fri, 15 Apr 2011 23:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Von Templateklasse ableiten und Spezialisieren on Fri, 15 Apr 2011 23:34:10 GMT]]></title><description><![CDATA[<p>Kannst du mal etwas näher spezifizieren, was du da eigentlich vorhast?</p>
<p>Die Initialisierung von c4 funktioniert, weil es eine implizite Umwandlung von unsigned int nach B&lt;unsigned int&gt; gibt - das kannst ud beheben, indem du den entsprechenden Konstruktor explizit definierst.<br />
Der Aufruf von c4.AddRef() funktioniert, weil C diese Methode von A geerbt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050043</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Apr 2011 23:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Von Templateklasse ableiten und Spezialisieren on Fri, 15 Apr 2011 23:48:46 GMT]]></title><description><![CDATA[<p>Ah ok, das hab ich wohl übersehn. Jetzt kommt es zu den entsprechenden Fehlermeldungen.</p>
<p>Nunja B soll wie A halt sein, nur mit zusätzlich Funktionen die andere abgeleitete Klassen von A nicht haben sollten. C verhält soll wie A funktionieren mit zusätzlichen Funktionen(und auch Membern), aber nur B als Datentypen erlauben, da die Funktionionen von C auf die Funktionen von B zugreifen sollen. Naja ist in etwa ersichtlich aus den Beispiel.</p>
<p>Danke für die schnelle Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050044</guid><dc:creator><![CDATA[Marrie]]></dc:creator><pubDate>Fri, 15 Apr 2011 23:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Von Templateklasse ableiten und Spezialisieren on Fri, 15 Apr 2011 23:55:14 GMT]]></title><description><![CDATA[<p>Marrie schrieb:</p>
<blockquote>
<p>Nunja B soll wie A halt sein, nur mit zusätzlich Funktionen die andere abgeleitete Klassen von A nicht haben sollten. C verhält soll wie A funktionieren mit zusätzlichen Funktionen(und auch Membern), aber nur B als Datentypen erlauben, da die Funktionionen von C auf die Funktionen von B zugreifen sollen. Naja ist in etwa ersichtlich aus den Beispiel.</p>
</blockquote>
<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="😕"
    /> <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="😕"
    /> <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 />
Kannst du das auch mal mit sinnvollen Bezeichnungen erklären? Ich hab' davon überhaupt kein Wort verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050046</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Apr 2011 23:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Von Templateklasse ableiten und Spezialisieren on Tue, 19 Jul 2011 07:05:42 GMT]]></title><description><![CDATA[<p>EDIT:erledigt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094630</guid><dc:creator><![CDATA[Marrie]]></dc:creator><pubDate>Tue, 19 Jul 2011 07:05:42 GMT</pubDate></item></channel></rss>