<?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[Frage zu Templates]]></title><description><![CDATA[<p>Hi,<br />
ich habe mal eine Frage zur Spezialisierung von Funktiontemplates.</p>
<pre><code class="language-cpp">template &lt;class Object&gt;
void Print(Object &amp;o);

template&lt;&gt;
void Print&lt;std::string&gt;(std::string &amp;o);
</code></pre>
<p>Ist es möglich das man statt Print<a href="std::string" rel="nofollow">std::string</a> nur Print schreiben muss? Sonst muss ich alles doppelt angeben, also einmal in den &lt;&gt;'s und dann nochmal in der Argumentliste.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298001/frage-zu-templates</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 03:14:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298001.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Jan 2012 15:35:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 15:35:33 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe mal eine Frage zur Spezialisierung von Funktiontemplates.</p>
<pre><code class="language-cpp">template &lt;class Object&gt;
void Print(Object &amp;o);

template&lt;&gt;
void Print&lt;std::string&gt;(std::string &amp;o);
</code></pre>
<p>Ist es möglich das man statt Print<a href="std::string" rel="nofollow">std::string</a> nur Print schreiben muss? Sonst muss ich alles doppelt angeben, also einmal in den &lt;&gt;'s und dann nochmal in der Argumentliste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166832</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 11 Jan 2012 15:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 15:37:08 GMT]]></title><description><![CDATA[<p>pyhax schrieb:</p>
<blockquote>
<p>Hi,<br />
ich habe mal eine Frage zur Spezialisierung von Funktiontemplates.</p>
<pre><code class="language-cpp">template &lt;class Object&gt;
void Print(Object &amp;o);

template&lt;&gt;
void Print&lt;std::string&gt;(std::string &amp;o);
</code></pre>
<p>Ist es möglich das man statt Print<a href="std::string" rel="nofollow">std::string</a> nur Print schreiben muss? Sonst muss ich alles doppelt angeben, also einmal in den &lt;&gt;'s und dann nochmal in der Argumentliste.</p>
</blockquote>
<p>ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166834</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 11 Jan 2012 15:37:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 15:40:59 GMT]]></title><description><![CDATA[<p>Habe ich auch gerade mitbekommen. Komisch, eigentlich dachte ich, ich hätte es schonmal probiert und es hat nicht geklappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166837</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 11 Jan 2012 15:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 15:52:12 GMT]]></title><description><![CDATA[<p>ja und nein...</p>
<p><s>In der Deklaration und Defintion MUSS es sowohl in der Template-Argument-Liste als auch in der Liste der Funktionsparameter stehen:</s></p>
<p>KORREKTUR: Du kannst es an besagter Stelle doch weglassen <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="🙂"
    /><br />
Folgendes bleibt trotzdem zu beachten:</p>
<p>Beim Aufrufen der Funktion kannst du aber die Template-Argumente weglassen, sofern der Compiler diese selbst herleiten kann.</p>
<pre><code class="language-cpp">std::string msg = &quot;hello world&quot;;
Print(msg);
// entspricht
Print&lt;std::string&gt;(&quot;hello world&quot;);
// aber nicht
Print(&quot;hello world&quot;);
// da hier der Typ nicht &quot;std::string&quot; sonder &quot;const char *&quot; ist
</code></pre>
<p>Die explizite Angabe ist beim Aufruf nur erforderlich, wenn:<br />
1. das Argument nicht eindeutig ermittelt werden kann (mir fällt gerade nichts konkretes als Beispiel ein xD)<br />
2. das Argument gar nicht ermittelt werden kann (z.B. das Argument betrifft nur den Rückgabetyp, diesen kann der Compiler nicht herleiten)<br />
3. man gezielt eine andere Sezialisierung nutzen möchte, als die, die der Compiler selbstständig nutzen würde (siehe Codebeispiel oben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166843</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Wed, 11 Jan 2012 15:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 15:55:04 GMT]]></title><description><![CDATA[<p>Noch eine Frage: Ist es egal ob ich Print&lt;&gt; oder nur Print schreibe? (GCC gibt mir keine Warnung, scheint also ok zu sein)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166848</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 11 Jan 2012 15:55:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 16:05:06 GMT]]></title><description><![CDATA[<p>pyhax schrieb:</p>
<blockquote>
<p>Noch eine Frage: Ist es egal ob ich Print&lt;&gt; oder nur Print schreibe? (GCC gibt mir keine Warnung, scheint also ok zu sein)</p>
</blockquote>
<p>ja.</p>
<p>DrakoXP schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string msg = &quot;hello world&quot;;
Print(msg);
// entspricht
Print&lt;std::string&gt;(&quot;hello world&quot;);
// aber nicht
Print(&quot;hello world&quot;);
// da hier der Typ nicht &quot;std::string&quot; sonder &quot;const char *&quot; ist
</code></pre>
</blockquote>
<p>Im dritten Fall ist Object = const char[12], da es sich um einen Referenzparameter handelt.</p>
<p>Zu beachten ist, dass Definitionen expliziter Funktionstemplatespezialisierungen keine Templatedefinitionen sondern Funktionsdefinitionen sind, folglich ist die ODR entsprechend zu beachten und die Funktion ggf. inline zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166855</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 11 Jan 2012 16:05:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Wed, 11 Jan 2012 20:29:36 GMT]]></title><description><![CDATA[<p>Spricht etwas dagegen, die Funktion zu überladen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2166978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2166978</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 11 Jan 2012 20:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Templates on Thu, 12 Jan 2012 13:51:22 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Spricht etwas dagegen, die Funktion zu überladen?</p>
</blockquote>
<p>Oops, manchmal sieht man den Wald vor lauter Bäumen nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>ch habe das ein paar mal in meinem Code (nicht für Print, aber so ähnlich):</p>
<pre><code class="language-cpp">template &lt;class T&gt;
void Print(const T &amp;) {
  static_assert(sizeof(T) == 0, &quot;Print is not available for this type. &quot;);
}

template &lt;&gt;
void Print(const std::string &amp; s) { //... }
//Noch mehr Spezialisierungen
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2167152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2167152</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Thu, 12 Jan 2012 13:51:22 GMT</pubDate></item></channel></rss>