<?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]]></title><description><![CDATA[<p>Also in einem anderen Header habe ich typedefs. Eins davon ist z.B. a. Und das typedef b ist entweder ein typedef von a oder - je nach Plattform - etwas obskures Plattformspezifisches. Nun möchte ich ein Klassentemplate spezialisieren und zwar so, dass man auf jeder Plattform sowohl a als auch b übergeben kann. Wenn a und b unterschiedliche Typen sind geht das tadellos. Aber wenn sie in Tat und Wahrheit derselbe Typ sind schlägt das selbstverständlich fehl (wie soll der Compiler auch wissen welche Spezialisierung gemeint ist?). Wie löst man das Problem?</p>
<p>PS: Damit man es sich bisschen besser vorstellen kann:</p>
<pre><code>typedef /*...*/ a;
typedef /*...*/ b; //kann u.U. a sein (Templatemagie und Präprozessorstatemets entscheiden es)

template&lt;typename T&gt; //hat im echten Fall noch mehr Template-Parameter
struct Foo
{
};

//und auch mehr Spezialisierungen

template&lt;&gt;
struct Foo&lt;a&gt; : public Impl
{
};
template&lt;&gt;
struct Foo&lt;b&gt; : public Impl
{
};
</code></pre>
<p>Gruß und danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327720/templatespezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 15:34:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327720.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 Aug 2014 10:21:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatespezialisierung on Sun, 31 Aug 2014 10:21:46 GMT]]></title><description><![CDATA[<p>Also in einem anderen Header habe ich typedefs. Eins davon ist z.B. a. Und das typedef b ist entweder ein typedef von a oder - je nach Plattform - etwas obskures Plattformspezifisches. Nun möchte ich ein Klassentemplate spezialisieren und zwar so, dass man auf jeder Plattform sowohl a als auch b übergeben kann. Wenn a und b unterschiedliche Typen sind geht das tadellos. Aber wenn sie in Tat und Wahrheit derselbe Typ sind schlägt das selbstverständlich fehl (wie soll der Compiler auch wissen welche Spezialisierung gemeint ist?). Wie löst man das Problem?</p>
<p>PS: Damit man es sich bisschen besser vorstellen kann:</p>
<pre><code>typedef /*...*/ a;
typedef /*...*/ b; //kann u.U. a sein (Templatemagie und Präprozessorstatemets entscheiden es)

template&lt;typename T&gt; //hat im echten Fall noch mehr Template-Parameter
struct Foo
{
};

//und auch mehr Spezialisierungen

template&lt;&gt;
struct Foo&lt;a&gt; : public Impl
{
};
template&lt;&gt;
struct Foo&lt;b&gt; : public Impl
{
};
</code></pre>
<p>Gruß und danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2415519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415519</guid><dc:creator><![CDATA[Fragovic]]></dc:creator><pubDate>Sun, 31 Aug 2014 10:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Sun, 31 Aug 2014 10:27:44 GMT]]></title><description><![CDATA[<pre><code>template&lt;&gt; 
struct Foo&lt;a&gt; : public Impl 
{ 
}; 

template&lt;&gt; 
struct Foo&lt;typename std::conditional&lt;std::is_same&lt;a, b&gt;::value, int*****, b&gt;::type&gt; : public Impl 
{ 
};
</code></pre>
<p>So vielleicht? Die Idee wäre dass die zweite explizite Spezialisierung einfach auf einen total anderen Typ spezialisiert wird falls <code>a</code> und <code>b</code> den gleichen Typ bezeichnen.</p>
<p>Edit: Ein weiterer Beweis dass <code>static_if</code> ein super Feature gewesen wäre... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2415520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415520</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 31 Aug 2014 10:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Sun, 31 Aug 2014 10:28:14 GMT]]></title><description><![CDATA[<p>Schick, ja das löst mein Problem. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2415522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415522</guid><dc:creator><![CDATA[Fragovic]]></dc:creator><pubDate>Sun, 31 Aug 2014 10:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Sun, 31 Aug 2014 11:59:55 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Edit: Ein weiterer Beweis dass <code>static_if</code> ein super Feature gewesen wäre... <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>
</blockquote>
<p>Nicht nur static_if, auch compile-time Type-Vergleiche:</p>
<pre><code>template &lt;&gt;
struct Foo&lt;a == b ? int***** : b&gt;
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2415536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415536</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 31 Aug 2014 11:59:55 GMT</pubDate></item></channel></rss>