<?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[Konditionelle Vererbung]]></title><description><![CDATA[<p>Geplant ist folgendes: Der Benutzer einer Klasse soll angeben können, ob die Klasse eine benötigte Funktionalität hat oder nicht.</p>
<p>Wie krieg ich das hin?</p>
<p>Nebenbedingungen:<br />
- Muss zur Compile-Zeit auswählbar sein.<br />
- Die Auswahl der Funktionalität sollte implizit in Abhängigkeit eines Templateparameters von Foo erfolgen, sodass der Benutzer nicht noch einen extra Template-Parameter angeben muss, der nur als Schalter dient. Also anstatt template&lt;class U, bool schalter&gt; class Foo nur template&lt;class U&gt; class Foo<br />
- Die Funktionalität ist abhängig von zwei weiteren Templateparametern der Klasse.</p>
<p>In etwa so:</p>
<pre><code class="language-cpp">// 1.
template &lt;typename U, typename V&gt;
struct Funktionalitaet
{
   void blub(const V&amp; fau) 
   {
      //mach irgendwas
      machIrgendwasMitU();
   }
};

//2.
struct Funktionalitaet
{
  //Hier ist wirklich nichts
};

template &lt;typename U, typename V&gt;
class Foo /* Hier gehört in Abhängigkeit von U entweder : public Funktionalitaet&lt;U,V&gt; oder : public Funktionalitaet hin */
{
   //...
};
</code></pre>
<p>Foo hat hierbei mehrere solcher Konfigurationen (mehrere optionale Funktionalitäten). 1. und 2. müssen nicht die selbe Klasse sein (mir kam nur irgendwie in den Sinn, dass das mit Spezialisierung irgendwie hinzubekommen ist).</p>
<p>Wenn ich jetzt irgendwie hinbekommen würde, dass Foo von 2. erbt, wenn U ein bestimmter Typ (nennen wir ihn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> ist, und von 1. erbt wenn U alles außer X ist, dann hätte ich den gewünschten Effekt erreicht.</p>
<p>Geht das und wenn ja, wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300315/konditionelle-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 21:13:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300315.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Feb 2012 19:13:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konditionelle Vererbung on Wed, 29 Feb 2012 19:17:17 GMT]]></title><description><![CDATA[<p>Geplant ist folgendes: Der Benutzer einer Klasse soll angeben können, ob die Klasse eine benötigte Funktionalität hat oder nicht.</p>
<p>Wie krieg ich das hin?</p>
<p>Nebenbedingungen:<br />
- Muss zur Compile-Zeit auswählbar sein.<br />
- Die Auswahl der Funktionalität sollte implizit in Abhängigkeit eines Templateparameters von Foo erfolgen, sodass der Benutzer nicht noch einen extra Template-Parameter angeben muss, der nur als Schalter dient. Also anstatt template&lt;class U, bool schalter&gt; class Foo nur template&lt;class U&gt; class Foo<br />
- Die Funktionalität ist abhängig von zwei weiteren Templateparametern der Klasse.</p>
<p>In etwa so:</p>
<pre><code class="language-cpp">// 1.
template &lt;typename U, typename V&gt;
struct Funktionalitaet
{
   void blub(const V&amp; fau) 
   {
      //mach irgendwas
      machIrgendwasMitU();
   }
};

//2.
struct Funktionalitaet
{
  //Hier ist wirklich nichts
};

template &lt;typename U, typename V&gt;
class Foo /* Hier gehört in Abhängigkeit von U entweder : public Funktionalitaet&lt;U,V&gt; oder : public Funktionalitaet hin */
{
   //...
};
</code></pre>
<p>Foo hat hierbei mehrere solcher Konfigurationen (mehrere optionale Funktionalitäten). 1. und 2. müssen nicht die selbe Klasse sein (mir kam nur irgendwie in den Sinn, dass das mit Spezialisierung irgendwie hinzubekommen ist).</p>
<p>Wenn ich jetzt irgendwie hinbekommen würde, dass Foo von 2. erbt, wenn U ein bestimmter Typ (nennen wir ihn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> ist, und von 1. erbt wenn U alles außer X ist, dann hätte ich den gewünschten Effekt erreicht.</p>
<p>Geht das und wenn ja, wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187118</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Wed, 29 Feb 2012 19:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konditionelle Vererbung on Wed, 29 Feb 2012 19:25:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;bool, typename T, typename&gt;
struct select
{
    typedef T type;
};

template &lt;typename T, typename U&gt;
struct select&lt;false, T, U&gt;
{
    typedef U type;
};
</code></pre>
<pre><code class="language-cpp">template &lt;typename U, typename V&gt;
class Foo
    : public typename select
    &lt;
        std::is_same&lt;U, X&gt;::value, // #include &lt;type_traits&gt; (C++ 11)
        Funktionalität&lt;U, V&gt;,
        Funktionalität
    &gt;::type
{
    ...
};
</code></pre>
<p>Edit: select gibts in C++11 offenbar auch schon als std::conditional.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187121</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 29 Feb 2012 19:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konditionelle Vererbung on Wed, 29 Feb 2012 19:38:55 GMT]]></title><description><![CDATA[<p>Perfekt! Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187132</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Wed, 29 Feb 2012 19:38:55 GMT</pubDate></item></channel></rss>