<?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[template nur mit bestimmten Typen definieren?]]></title><description><![CDATA[<pre><code class="language-cpp">class Base{
//ABSTRACT
};

class A: public Base{
};

class B: public Base{

};
class C: public Base{

};

template&lt;class BESTTYP&gt;
class myTemplate {

};
</code></pre>
<p>Gibt es ne möglichkeit damit myTemplate nur die typen A,B und C annehmen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191834/template-nur-mit-bestimmten-typen-definieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 07:45:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191834.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Sep 2007 05:40:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 05:40:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Base{
//ABSTRACT
};

class A: public Base{
};

class B: public Base{

};
class C: public Base{

};

template&lt;class BESTTYP&gt;
class myTemplate {

};
</code></pre>
<p>Gibt es ne möglichkeit damit myTemplate nur die typen A,B und C annehmen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360548</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 07 Sep 2007 05:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 05:45:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">emplate&lt;class BESTTYP&gt;
class myTemplate;

template&lt;&gt;
class myTemplate&lt;A&gt; {

};

template&lt;&gt;
class myTemplate&lt;B&gt; {

};

template&lt;&gt;
class myTemplate&lt;C&gt; {

};
</code></pre>
<p>Bei nem schlechten Design könntest du aber in den drei Klassen den selben Code immer haben -&gt; nicht guut <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/1360549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360549</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Sep 2007 05:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 05:47:44 GMT]]></title><description><![CDATA[<p>Wenn du doch ehe nur diese drei Klassen instanzieren lassen willst, wieso machst du überhaupt nen Template draus und benutzt nicht einfach nur die Klassen A,B und C ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360550</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Sep 2007 05:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 05:53:12 GMT]]></title><description><![CDATA[<p>Du könntest auch im Template ein Static Assert machen, um sicherzustellen, dass T nur A, B oder C sein kann. Ansonsten gibt's dann einen Compilerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360551</guid><dc:creator><![CDATA[TomasRiker]]></dc:creator><pubDate>Fri, 07 Sep 2007 05:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 06:03:22 GMT]]></title><description><![CDATA[<p>Warum hab ich bei BorisD.K. so oft den Eindruck, dass das ein total wirres Design ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360555</guid><dc:creator><![CDATA[mal ehrlich]]></dc:creator><pubDate>Fri, 07 Sep 2007 06:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 06:06:03 GMT]]></title><description><![CDATA[<p>naja , ist alles nich so trivial....</p>
<p>zudem informier ich mich nach alterniven und möglichkeiten diverse dinge umzusetzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360556</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 07 Sep 2007 06:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 06:19:53 GMT]]></title><description><![CDATA[<p>vlt solltest du dir mal design patters anschauen. dieses head first buch soll ja ganz gut sein, ich habs aber nicht gelesen, sondern nur die sachen bei wikipedia usw. angeschaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360561</guid><dc:creator><![CDATA[mal ehrlich]]></dc:creator><pubDate>Fri, 07 Sep 2007 06:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 08:44:54 GMT]]></title><description><![CDATA[<p>Hatte auch mal überlegt, dass eine solche Typbegrenzung ganz nett wäre...</p>
<p>Auf der anderen Seite ist es aber auch so das ein Template üblicherweise eine bestimmte Schnittstelle der als Parameter übergebenen Klasse erwartet.<br />
Daher stellt sich die Frage wieso man es unbedingt unterbinden möchte, dass man das Template auch für Klassen ausprägen kann, die diese Schnittstelle besitzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360633</guid><dc:creator><![CDATA[MathiasTemp]]></dc:creator><pubDate>Fri, 07 Sep 2007 08:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 11:52:22 GMT]]></title><description><![CDATA[<p>Wirklich unterbinden kannst du die Instanziierung des Templates mit anderen Klassen so eh nicht.</p>
<p>Um KasFs Problem zu umgehen, dass du bei der einzel-instanziierung jedesmal den ganzen Code wiederholen müsstest, wäre folgendes möglich:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct Selector {
  enum {IsBESTTYPE = false};
};

template&lt;&gt;
struct Selector&lt;A&gt; {
  enum {IsBESTTYPE = true};
}; 

//usw für alle erwünschten Klassen

template&lt;class T, bool b&gt; class MyTemplateImp;
template&lt;class T&gt;
class MyTemplate : public MyTemplateImp&lt;T, Selector&lt;T&gt;::IsBESTTYPE&gt; {}; //kann man evtl auch irgendwie mit Spezialisierung regeln?

template&lt;class T&gt;
class MyTemplateImp&lt;T, true&gt; {
  //einmalig der Code
};

//Benutzung:
MyTemplate&lt;A&gt; mta;
</code></pre>
<p>MyTemplate kann jetzt nur die erwünschten Klassen als parameter erhalten, andernfalls wuerde es von MyTemplate&lt;T, false&gt; erben, was nicht definiert wurde.</p>
<p>Wenn jetzt später eine Klasse hinzugefuegt wird, die auch vom Template benutzt werden darf, einfach Selector für diese Klasse spezialisieren und IsBESTTYPE auf true setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1360745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360745</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 07 Sep 2007 11:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 11:57:37 GMT]]></title><description><![CDATA[<p>Ieks, ich habs mal wieder zu kompliziert gemacht ^^<br />
so gehts vermutlich auch:</p>
<pre><code class="language-cpp">template &lt;class T&gt; struct U;
template &lt;class T&gt;
class MyTemplate : public U&lt;T&gt; {
  //einmalig der code
};

//Spezialisierungen von U definieren:
template&lt;&gt;
struct U&lt;A&gt; {};

//benutzung:
MyTemplate&lt;A&gt; mta; //ok
MyTemplate&lt;F&gt; mtf; //ERROR: erbt von U&lt;F&gt;, was nicht definiert ist.
</code></pre>
<p>Btw: deine KLassen A, B, C von Base abzuleiten ist zwar vielleicht nützlich, aber nicht unbedingt erforderlich. Es reicht, wenn die Klassen alle die Funktionen definieren, die vom Template benutzt werden. Dazu müssen sie die nicht erben. <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/1360751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360751</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 07 Sep 2007 11:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to template nur mit bestimmten Typen definieren? on Fri, 07 Sep 2007 12:05:44 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ieks, ich habs mal wieder zu kompliziert gemacht ^^<br />
so gehts vermutlich auch:</p>
<pre><code class="language-cpp">template &lt;class T&gt; struct U;
template &lt;class T&gt;
class MyTemplate : public U&lt;T&gt; {
  //einmalig der code
};

//Spezialisierungen von U definieren:
template&lt;&gt;
struct U&lt;A&gt; {};

//benutzung:
MyTemplate&lt;A&gt; mta; //ok
MyTemplate&lt;F&gt; mtf; //ERROR: erbt von U&lt;F&gt;, was nicht definiert ist.
</code></pre>
<p>Btw: deine KLassen A, B, C von Base abzuleiten ist zwar vielleicht nützlich, aber nicht unbedingt erforderlich. Es reicht, wenn die Klassen alle die Funktionen definieren, die vom Template benutzt werden. Dazu müssen sie die nicht erben. <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>
</blockquote>
<p>Nice <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/1360760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1360760</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Sep 2007 12:05:44 GMT</pubDate></item></channel></rss>