<?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 auf enums beschränken]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich frage mich, gibts es eine Möglichkeit, ein Funktionstemplate (das eine Referenz auf einen Typ als Parameter akzeptieren und den selben Typ als Ergebnis liefern soll) auf enums zu beschränken? Wenn ich ein herkömmliches Template schreibe, würde der Compiler ja bekanntlich für jeden Datentyp das Funktionstemplate instanziieren. Ich möchte aber, daß er das Template nur auf enum-Datentypen anwendet, weil es nur auf solche Datentypen Sinn macht.</p>
<p>Ist das möglich?</p>
<p>Ich könnte das Template natürlich völlig generisch lassen, aber ich würde z.B. für alle nicht-enum Typen gerne ein anderes Funktionstemplate schreiben, ohne dabei ihn Mehrdeutigekeiten zu geraten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125022/template-auf-enums-beschränken</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 04:29:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125022.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Nov 2005 18:20:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template auf enums beschränken on Wed, 02 Nov 2005 18:20:36 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich frage mich, gibts es eine Möglichkeit, ein Funktionstemplate (das eine Referenz auf einen Typ als Parameter akzeptieren und den selben Typ als Ergebnis liefern soll) auf enums zu beschränken? Wenn ich ein herkömmliches Template schreibe, würde der Compiler ja bekanntlich für jeden Datentyp das Funktionstemplate instanziieren. Ich möchte aber, daß er das Template nur auf enum-Datentypen anwendet, weil es nur auf solche Datentypen Sinn macht.</p>
<p>Ist das möglich?</p>
<p>Ich könnte das Template natürlich völlig generisch lassen, aber ich würde z.B. für alle nicht-enum Typen gerne ein anderes Funktionstemplate schreiben, ohne dabei ihn Mehrdeutigekeiten zu geraten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906705</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Wed, 02 Nov 2005 18:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf enums beschränken on Wed, 02 Nov 2005 18:34:32 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht vollkommen sicher, aber ich glaube nicht, dass das geht. Zumindest nicht mit den Grundmitteln der Sprache.</p>
<p>Du kannst höchstens die Template-Funktion für ein bestimmtes (KEIN anonymes) enum spezialisieren. Anonyme enums lehnt der Compiler bei mir ab (error: no matching function for call to `foo(&lt;anonymous enum&gt;)').</p>
<p>Dann kannst du aber auch normale Überladung verwenden. Oder vertrau deinem Anwender <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/906713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906713</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 02 Nov 2005 18:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf enums beschränken on Wed, 02 Nov 2005 19:38:47 GMT]]></title><description><![CDATA[<p>edit: müll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906762</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Nov 2005 19:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf enums beschränken on Wed, 02 Nov 2005 20:26:09 GMT]]></title><description><![CDATA[<p>ein versuch</p>
<pre><code class="language-cpp">#include &quot;boost/type_traits.hpp&quot;
// generic
template&lt;typename T, bool&gt;
struct Foo
{
	T operator()(T&amp; t)
	{
		// ...
		std::cout &lt;&lt; &quot;generic\n&quot;;
		return T();
	}
};
// enum
template&lt;typename T&gt;
struct Foo&lt; T, true &gt;
{
	T operator()(T&amp; t)
	{
		// ...
		std::cout &lt;&lt; &quot;enum\n&quot;;
		return T();
	}
};
template&lt;typename T&gt;
T foo(T&amp; t)
{
	return Foo&lt; T, boost::is_enum&lt; T &gt;::value &gt;()( t );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/906792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906792</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Nov 2005 20:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf enums beschränken on Wed, 02 Nov 2005 20:47:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
boost::type_traits und boost::enable_if sollten alles sein, was du dazu brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906810</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 02 Nov 2005 20:47:35 GMT</pubDate></item></channel></rss>