<?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 Spezialisierung für Konvertierungsoperator]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Klasse mit einer Templatefunktion für den Konvertierungsoperator. Das funktioniert einwandfrei. Jetzt möchte ich eine Spezialisierung des Konvertierungsoperators für std::string. Leider gibt mein Compiler dazu immer einen Fehler aus. Kann mir jemand die korrekte Syntax für diese Spezialisierung sagen oder ist das gar nicht möglich?</p>
<pre><code class="language-cpp">class DeviceSignal{
	public:
		// .. noch einiges mehr ..
		template&lt;class T&gt; operator T()const{
			return m_msg.getSignalValue(m_name);
		};

		// Die folgende Zeile führt zu: illegal explizit template specialisation
		template&lt;&gt; operator std::string&lt;std::string&gt;() const{};	
	private:
		DeviceMessage&amp; m_msg;
		std::string m_name;

	};
	// Die folgende Zeile führt zu: declaration syntax error 
	template&lt;&gt; DeviceSignal::operator std::string&lt;std::string&gt;() const;
</code></pre>
<p>DJohn</p>
<p>//EDIT die Rechtschreibung</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118290/template-spezialisierung-für-konvertierungsoperator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 11:22:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118290.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Aug 2005 06:56:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 07:11:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Klasse mit einer Templatefunktion für den Konvertierungsoperator. Das funktioniert einwandfrei. Jetzt möchte ich eine Spezialisierung des Konvertierungsoperators für std::string. Leider gibt mein Compiler dazu immer einen Fehler aus. Kann mir jemand die korrekte Syntax für diese Spezialisierung sagen oder ist das gar nicht möglich?</p>
<pre><code class="language-cpp">class DeviceSignal{
	public:
		// .. noch einiges mehr ..
		template&lt;class T&gt; operator T()const{
			return m_msg.getSignalValue(m_name);
		};

		// Die folgende Zeile führt zu: illegal explizit template specialisation
		template&lt;&gt; operator std::string&lt;std::string&gt;() const{};	
	private:
		DeviceMessage&amp; m_msg;
		std::string m_name;

	};
	// Die folgende Zeile führt zu: declaration syntax error 
	template&lt;&gt; DeviceSignal::operator std::string&lt;std::string&gt;() const;
</code></pre>
<p>DJohn</p>
<p>//EDIT die Rechtschreibung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853851</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Wed, 17 Aug 2005 07:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 07:20:41 GMT]]></title><description><![CDATA[<p>schonmal versucht, die templateparameter direkt hinter das operator zu schreiben?:</p>
<pre><code class="language-cpp">template&lt;&gt; operator&lt;std::string&gt; std::string() const {};
</code></pre>
<p>weiß nicht genau wo man die template-parameter bei diesem operator hinschreibt, könnte mir aber vorstellen, dass es an dieser stelle ist.<br />
Denn: wenn man die spezialisierung statt mit std::string mit einer template-klasse A&lt;B&gt; machte, käme mit deiner schreibweise in etwa folgendes:</p>
<pre><code class="language-cpp">template&lt;&gt; operator A&lt;B&gt;&lt;A&lt;B&gt; &gt;() const
</code></pre>
<p>, was doch etwas arg seltsam aussieht.<br />
Von daher vermutew ich, dass das die illegal explicit template specialization daher kommt, dass er das std::string<a href="std::string" rel="nofollow">std::string</a> als template-spezialisierung von std::string auffasst, was aber garkein template ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853871</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 17 Aug 2005 07:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 07:33:39 GMT]]></title><description><![CDATA[<p>Hallo pumuckl,</p>
<p>Auch mit Deiner Variante kommen genau die gleichen Fehler. Innerhalb der Klasse tritt der Fehler</p>
<pre><code>illegal explizit template specialisation
</code></pre>
<p>schon bei</p>
<pre><code class="language-cpp">template&lt;&gt;
</code></pre>
<p>auf und wenn ich es außerhalb der Klasse versuche, gibt es wieder</p>
<pre><code>declaration syntax error
</code></pre>
<p>Ist sowas überhaupt erlaubt?</p>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853887</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Wed, 17 Aug 2005 07:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 07:42:36 GMT]]></title><description><![CDATA[<p>DJohn schrieb:</p>
<blockquote>
<p>Auch mit Deiner Variante kommen genau die gleichen Fehler. Innerhalb der Klasse tritt der Fehler</p>
<pre><code>illegal explizit template specialisation
</code></pre>
<p>schon bei</p>
<pre><code class="language-cpp">template&lt;&gt;
</code></pre>
<p>auf</p>
</blockquote>
<p>Was daran liegt, dass Spezialisierung nur im Namespace-Scope nicht aber im Scope einer Klasse erfolgen dürfen.</p>
<p>DJohn schrieb:</p>
<blockquote>
<p>und wenn ich es außerhalb der Klasse versuche, gibt es wieder</p>
<pre><code>declaration syntax error
</code></pre>
<p>Ist sowas überhaupt erlaubt?</p>
</blockquote>
<p>Ja. Die korrekte Syntax lautet:</p>
<pre><code class="language-cpp">template &lt;&gt;
DeviceSignal::operator std::string() const;
</code></pre>
<p>Ich würde hier allerdings Überladung statt Spezialisierung verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853895</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 17 Aug 2005 07:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 08:50:12 GMT]]></title><description><![CDATA[<p>Danke HumeSikkins,</p>
<p>so funktioniert es. Allerdings muss ich diese Spezialiserung immer noch in der Header-Datei implementieren. Warum reicht hier nicht der Prototyp in der Header-Datei und die Implementierung in der CPP-Datei? Durch die Spezialisierung sind doch alle Typen bekannt.</p>
<p>Die Operator-Überladung funktioniert leider nicht, da durch das Template dann einfach 2 Konvertierungsoperatoren für std::string bereitstehen und der Compiler sich dann nicht mehr entscheiden kann, welchen er nehmen soll. Und um das Template ganz zu ersetzen, bin ich einfach zu faul.</p>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853938</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Wed, 17 Aug 2005 08:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 08:54:47 GMT]]></title><description><![CDATA[<p>Eigentlich sollte überladung reichen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853946</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Wed, 17 Aug 2005 08:54:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Wed, 17 Aug 2005 14:26:45 GMT]]></title><description><![CDATA[<p>DJohn schrieb:</p>
<blockquote>
<p>Die Operator-Überladung funktioniert leider nicht, da durch das Template dann einfach 2 Konvertierungsoperatoren für std::string bereitstehen und der Compiler sich dann nicht mehr entscheiden kann, welchen er nehmen soll.</p>
</blockquote>
<p>Dann ist dein Compiler in diesem Punkt aber nicht standardkonform. Bei der Auflösung von Überladungen werden non-templates bevorzugt.</p>
<blockquote>
<p>Allerdings muss ich diese Spezialiserung immer noch in der Header-Datei implementieren. Warum reicht hier nicht der Prototyp in der Header-Datei und die Implementierung in der CPP-Datei?</p>
</blockquote>
<p>Genau das sollte eigentlich reichen. Eine explizite Spezialisierung ist in dieser Hinsicht kein Template mehr. Definierst du eine solche Spezialisierung in einem Header und ist diese Definition nicht als inline deklariert, so solltest du eigentlich &quot;multiple definition&quot;-Fehler erhalten, sobald du die Spezialisierung in mehr als einer cpp-Datei verwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854277</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 17 Aug 2005 14:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für Konvertierungsoperator on Mon, 22 Aug 2005 08:57:36 GMT]]></title><description><![CDATA[<p>Nochmal Danke,</p>
<p>Meine Probleme mit den letzten beiden Punkten liegen offensichtlich am alten<br />
Compiler (CodeWarrior Version 8.0), aber ich habe ja jetzt eine Lösung.</p>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855884</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Mon, 22 Aug 2005 08:57:36 GMT</pubDate></item></channel></rss>