<?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[Explicit Instantiation]]></title><description><![CDATA[<p>Ich lese gerade zum zweiten Mal den Primer durch und bin bei function-templates angekommen. Ich Primer gibt es dann ein Beispiel für &quot;Explicit Instantiation&quot;</p>
<p>Ich habe mir folgendes Beispiel gecodet:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using std::cout;
using std::cin;
using std::endl;

struct job
{
	char name[40];
	double salary;
	int floor;
};

template &lt;typename T&gt;
void Swap( T &amp;a, T &amp;b )
{
	cout &lt;&lt; &quot;Use general template&quot; &lt;&lt; endl;
	T temp = a;
	a = b;
	b = temp;
}

template &lt;&gt; void Swap&lt;job&gt;( job &amp;a, job &amp;b )
{
	cout &lt;&lt; &quot;Use specialization for job&quot; &lt;&lt; endl;
	job temp = a;
	b = a;
	a = temp;
}

int main()
{
	char ch1 = 'a';
	char ch2 = 'b';
	template void Swap&lt;char&gt;( char &amp;, char &amp; ); // The error occurs here
}
</code></pre>
<p>Ich bekomme die folgenden Fehlermeldungen:</p>
<blockquote>
<p>1&gt;c:\users\urs hp\documents\visual studio 2010\projects\testing\testing\main.cpp(45): error C2951: template declarations are only permitted at global, namespace, or class scope<br />
1&gt;c:\users\urs hp\documents\visual studio 2010\projects\testing\testing\main.cpp(45): error C2252: an explicit instantiation of a template can only occur at namespace scope</p>
</blockquote>
<p>Ich glaube ich weiss was der Compiler versucht mir zu sagen. Aber im Primer steht fast ein identisches Beispiel. Kann mir jemand sagen wiso das in der main() nicht klappt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279651/explicit-instantiation</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 11:09:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279651.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Dec 2010 13:31:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 13:31:19 GMT]]></title><description><![CDATA[<p>Ich lese gerade zum zweiten Mal den Primer durch und bin bei function-templates angekommen. Ich Primer gibt es dann ein Beispiel für &quot;Explicit Instantiation&quot;</p>
<p>Ich habe mir folgendes Beispiel gecodet:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using std::cout;
using std::cin;
using std::endl;

struct job
{
	char name[40];
	double salary;
	int floor;
};

template &lt;typename T&gt;
void Swap( T &amp;a, T &amp;b )
{
	cout &lt;&lt; &quot;Use general template&quot; &lt;&lt; endl;
	T temp = a;
	a = b;
	b = temp;
}

template &lt;&gt; void Swap&lt;job&gt;( job &amp;a, job &amp;b )
{
	cout &lt;&lt; &quot;Use specialization for job&quot; &lt;&lt; endl;
	job temp = a;
	b = a;
	a = temp;
}

int main()
{
	char ch1 = 'a';
	char ch2 = 'b';
	template void Swap&lt;char&gt;( char &amp;, char &amp; ); // The error occurs here
}
</code></pre>
<p>Ich bekomme die folgenden Fehlermeldungen:</p>
<blockquote>
<p>1&gt;c:\users\urs hp\documents\visual studio 2010\projects\testing\testing\main.cpp(45): error C2951: template declarations are only permitted at global, namespace, or class scope<br />
1&gt;c:\users\urs hp\documents\visual studio 2010\projects\testing\testing\main.cpp(45): error C2252: an explicit instantiation of a template can only occur at namespace scope</p>
</blockquote>
<p>Ich glaube ich weiss was der Compiler versucht mir zu sagen. Aber im Primer steht fast ein identisches Beispiel. Kann mir jemand sagen wiso das in der main() nicht klappt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000731</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 31 Dec 2010 13:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 13:45:40 GMT]]></title><description><![CDATA[<p>Zeile 35 ist eine Funktionsdeklaration innerhalb einer Funktion. Das ist nicht zulässig.<br />
Wie die Fehlermeldung schon aussagt, darf man dies nur im globalen Gültigkeitsbereich oder im Scope der Klasse oder des Namensraumes.</p>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Aber im Primer steht fast ein identisches Beispiel</p>
</blockquote>
<p>Was bedeutet denn &quot;fast&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000734</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 31 Dec 2010 13:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 13:54:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main()
{
    char ch1 = 'a';
    char ch2 = 'b';
    Swap(ch1, ch2);
}
</code></pre>
<p>Suchst Du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000736</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 31 Dec 2010 13:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 14:28:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5798">@BasicMan01</a><br />
Im Primer steht die Zeile<br />
template void Swap&lt;char&gt;( char &amp;, char &amp; )<br />
genau so in der main drin.</p>
<p>Es soll eine explizitie Spezialisierung sein für die Templatefunktion. Im Prinzip ist mein Beispiel genau das gleiche wie im Primer. Ich habe nur eine Spezialisierung mehr.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19131">@Theta</a><br />
Nein, es soll eine explizite Spezialisierung definieren. Gemäss dem Primer müsste das möglich sein.</p>
<p>Es steht im Primer in Kapitel 8. S. 381 falls das jemandem hilft.</p>
<p>*Edit<br />
@ Theta<br />
In deinem Beispiel wird ja implizit das Template für char definiert. Ich möchte das nun jedoch auch explizit machen können. Kann es sein, dass Visual Studio 2010 das nicht unterstützt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000746</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 31 Dec 2010 14:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 16:00:22 GMT]]></title><description><![CDATA[<p>Ich nehme dann mal an, dass es sich entweder um einen Fehler im Buch handelt oder, wenn niemandem dieses Konstrukt bekannt vorkommt, dass es völlig unwichtig ist <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/2000794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000794</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 31 Dec 2010 16:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 17:49:27 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Aber im Primer steht fast ein identisches Beispiel.</p>
</blockquote>
<p>Betonung auf &quot;fast identisch&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000824</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 31 Dec 2010 17:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Fri, 31 Dec 2010 19:04:59 GMT]]></title><description><![CDATA[<p>Fall jemand nachlesen möchte - das steht nicht im Primer von Lippman&amp;Moo, sondern im C++ Primer Plus von Prata.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000848</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Fri, 31 Dec 2010 19:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Sat, 01 Jan 2011 13:42:03 GMT]]></title><description><![CDATA[<p>Ja, fast identisch. Nur sehe ich den wesentlichen Unterschied nicht ^^ Ich verstehe nicht was in meinem Beispiel nicht geht. Ich wers nochmal durchlesen und drüber nachdenken ^^</p>
<p>Jo sry, hätte sagen müssen, dass es der C++ Primer Plus von Prata ist <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/2000960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000960</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 01 Jan 2011 13:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Sat, 01 Jan 2011 14:02:45 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Ja, fast identisch. Nur sehe ich den wesentlichen Unterschied nicht ^^ Ich verstehe nicht was in meinem Beispiel nicht geht.</p>
</blockquote>
<p>Die Fehlermeldung sagt es dir ja bereits. Eine explizite Instanzierung gehört in den globalen, namespace oder class scope. Und nicht in den scope einer Funktion. Ist ja auch nichts laufzeitrelevantes. Warum sollte es dann in eine Funktion rein?</p>
<pre><code class="language-cpp">template void Swap&lt;char&gt;( char &amp;, char &amp; ); // ok

int main()
{
    char ch1 = 'a';
    char ch2 = 'b';

}
</code></pre>
<p>Und schon gehts.<br />
Wenn das Buch etwas anderes sagt ist es sehr wahrscheinlich (ich hab jetzt nicht im Standard nachgeschaut) falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000969</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 01 Jan 2011 14:02:45 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Sat, 01 Jan 2011 14:06:52 GMT]]></title><description><![CDATA[<p>Ja, ich nehme dann mal an, dass es ein Fehler im Buch ist. Ist onehin merkwürdig, ich wusste gar nicht was das überhaupt genau bewirken soll. Weil ich es nicht verstanden habe habe ich es dann mal ausprobiert.</p>
<p>Danke für eure Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000970</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 01 Jan 2011 14:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Sat, 01 Jan 2011 14:16:07 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Ja, ich nehme dann mal an, dass es ein Fehler im Buch ist. Ist onehin merkwürdig, ich wusste gar nicht was das überhaupt genau bewirken soll.</p>
</blockquote>
<p>Es soll Kompilierungszeiten und Code Generierung optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000971</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 01 Jan 2011 14:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Explicit Instantiation on Sat, 01 Jan 2011 14:21:53 GMT]]></title><description><![CDATA[<p>Achso, danke. Das steht hier im Buch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2000973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2000973</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 01 Jan 2011 14:21:53 GMT</pubDate></item></channel></rss>