<?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[Templatespezialisierung für alle abgeleiteten Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiß, dass Templatespezialisierung nicht greifen, wenn man nicht die angegebene Klasse sondern eine abgeleitete Klasse als Template-Parameter angibt.<br />
Gibt es dennoch eine Möglichkeit ein Verhalten zu verwirklichen, wo es auch für abgeleitete Klassen greift?</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

class Foo{};

class Bar : public Foo{};

template&lt;typename T&gt;
class FooBar{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;default&quot; &lt;&lt; std::endl;
        }
};

template&lt;&gt;
class FooBar&lt;Foo&gt;{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;Foo&quot; &lt;&lt; std::endl;
        }
};

int main(){
        FooBar&lt;Foo&gt; foo;
        foo.foobar();
        FooBar&lt;Bar&gt; bar;
        bar.foobar();
}
</code></pre>
<p>Ich hoffe ihr wisst, was ich meine.<br />
Also bei bar.foobar(); hätte ich gerne &quot;Foo&quot; als Ausgabe.</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284844/templatespezialisierung-für-alle-abgeleiteten-klassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 18:20:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284844.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Apr 2011 16:04:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Sat, 09 Apr 2011 16:04:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiß, dass Templatespezialisierung nicht greifen, wenn man nicht die angegebene Klasse sondern eine abgeleitete Klasse als Template-Parameter angibt.<br />
Gibt es dennoch eine Möglichkeit ein Verhalten zu verwirklichen, wo es auch für abgeleitete Klassen greift?</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

class Foo{};

class Bar : public Foo{};

template&lt;typename T&gt;
class FooBar{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;default&quot; &lt;&lt; std::endl;
        }
};

template&lt;&gt;
class FooBar&lt;Foo&gt;{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;Foo&quot; &lt;&lt; std::endl;
        }
};

int main(){
        FooBar&lt;Foo&gt; foo;
        foo.foobar();
        FooBar&lt;Bar&gt; bar;
        bar.foobar();
}
</code></pre>
<p>Ich hoffe ihr wisst, was ich meine.<br />
Also bei bar.foobar(); hätte ich gerne &quot;Foo&quot; als Ausgabe.</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046770</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 09 Apr 2011 16:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Sat, 09 Apr 2011 16:36:00 GMT]]></title><description><![CDATA[<p>Du kannst es so machen, wie die STL mit den Iteratoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046780</guid><dc:creator><![CDATA[FooAlsAufgabe]]></dc:creator><pubDate>Sat, 09 Apr 2011 16:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Sat, 09 Apr 2011 16:40:42 GMT]]></title><description><![CDATA[<p>Irgendwo in der Boost-Library bzw. TR1 gibt es doch ein derived_of&lt;&gt;-Template, eventuell könntest du damit etwas basteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046784</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 09 Apr 2011 16:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Sat, 09 Apr 2011 17:10:06 GMT]]></title><description><![CDATA[<p>FooAlsAufgabe schrieb:</p>
<blockquote>
<p>Du kannst es so machen, wie die STL mit den Iteratoren.</p>
</blockquote>
<p>Ich verstehe absolut nicht, was du meinst... <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>CStoll schrieb:</p>
<blockquote>
<p>Irgendwo in der Boost-Library bzw. TR1 gibt es doch ein derived_of&lt;&gt;-Template, eventuell könntest du damit etwas basteln.</p>
</blockquote>
<p>Ich werd mal kucken, ob ich damit etwas basteln kann.</p>
<p>thx</p>
<p>EDIT: Du meinst &quot;is_base_of&quot;, oder?<br />
<a href="http://www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/boost_typetraits/reference/is_base_of.html" rel="nofollow">www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/boost_typetraits/reference/is_base_of.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046798</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 09 Apr 2011 17:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Mon, 11 Apr 2011 14:51:12 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>EDIT: Du meinst &quot;is_base_of&quot;, oder?<br />
<a href="http://www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/boost_typetraits/reference/is_base_of.html" rel="nofollow">www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/boost_typetraits/reference/is_base_of.html</a></p>
</blockquote>
<p>Jup. Wenn du einen zweiten Temaplte-Parameter mit is_base_of default-belegst, brauchst du an deinem Beispielcode kaum was ändern:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;boost/type_traits/is_base_of.hpp&gt;

class Foo{};

class Bar : public Foo{};

template&lt;typename T, typename is_base_t = typename boost::is_base_of&lt;Foo, T&gt;::type &gt;
class FooBar{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;default&quot; &lt;&lt; std::endl;
        }
};

template&lt;typename T&gt;
class FooBar&lt;T, boost::true_type&gt;{
public:
        void foobar(){
                std::cout &lt;&lt; &quot;Foo or derived&quot; &lt;&lt; std::endl;
        }
};

int main(){
        FooBar&lt;Foo&gt; foo;
        foo.foobar();
        FooBar&lt;Bar&gt; bar;
        bar.foobar();
        FooBar&lt;int&gt; fbi;
        fbi.foobar();
}
</code></pre>
<p>Output:</p>
<pre><code>Foo or derived
Foo or derived
default
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2047562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047562</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Apr 2011 14:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung für alle abgeleiteten Klassen on Mon, 11 Apr 2011 16:40:11 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Sauber <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2047618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047618</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 11 Apr 2011 16:40:11 GMT</pubDate></item></channel></rss>