<?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 Problem]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgenden Code:</p>
<pre><code>template &lt; typename T0,typename T1 &gt; T0 lexical_cast (T1 p_source) {
	T0 buffer;
	stringstream ss;
	ss &lt;&lt; p_source;
	ss &gt;&gt; buffer;
	return buffer;
};
template &lt; typename T1 &gt; char * lexical_cast &lt; char *,T1 &gt; (T1 p_source) {
	stringstream ss;
	ss &lt;&lt; p_source;
	return &amp; ss.str () [0];
};
template &lt; typename T1 &gt; char const * lexical_cast &lt; char const *,T1 &gt; (T1 p_source) {
	stringstream ss;
	ss &lt;&lt; p_source;
	return &amp; ss.str () [0];
};
unsigned int counter = 10;
const char * test = lexical_cast &lt; const char * &gt; (counter);
</code></pre>
<p>Ich bekomme folgende Fehler:</p>
<blockquote>
<p>C:\Program Files (x86)\MinGW/PHBU.hpp:48:72: error: function template partial specialization 'lexical_cast&lt;char *, T1&gt;' is not allowed<br />
C:\Program Files (x86)\MinGW/PHBU.hpp:53:84: error: function template partial specialization 'lexical_cast&lt;const char *, T1&gt;' is not allowed</p>
</blockquote>
<p>Wieso ist die Spezialisierung nicht erlaubt bzw. wie müsste der Code richtig aussehen?</p>
<p>Danke im Voraus!</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320458/template-spezialisierung-problem</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:40:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320458.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Sep 2013 09:30:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 09:30:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgenden Code:</p>
<pre><code>template &lt; typename T0,typename T1 &gt; T0 lexical_cast (T1 p_source) {
	T0 buffer;
	stringstream ss;
	ss &lt;&lt; p_source;
	ss &gt;&gt; buffer;
	return buffer;
};
template &lt; typename T1 &gt; char * lexical_cast &lt; char *,T1 &gt; (T1 p_source) {
	stringstream ss;
	ss &lt;&lt; p_source;
	return &amp; ss.str () [0];
};
template &lt; typename T1 &gt; char const * lexical_cast &lt; char const *,T1 &gt; (T1 p_source) {
	stringstream ss;
	ss &lt;&lt; p_source;
	return &amp; ss.str () [0];
};
unsigned int counter = 10;
const char * test = lexical_cast &lt; const char * &gt; (counter);
</code></pre>
<p>Ich bekomme folgende Fehler:</p>
<blockquote>
<p>C:\Program Files (x86)\MinGW/PHBU.hpp:48:72: error: function template partial specialization 'lexical_cast&lt;char *, T1&gt;' is not allowed<br />
C:\Program Files (x86)\MinGW/PHBU.hpp:53:84: error: function template partial specialization 'lexical_cast&lt;const char *, T1&gt;' is not allowed</p>
</blockquote>
<p>Wieso ist die Spezialisierung nicht erlaubt bzw. wie müsste der Code richtig aussehen?</p>
<p>Danke im Voraus!</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356354</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Sun, 29 Sep 2013 09:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 09:45:54 GMT]]></title><description><![CDATA[<p>Funktionen können nicht spezialisiert werden, sondern nur überladen.</p>
<p>Die mechanische Transformation ist, die Funktionen in structs umzuwandeln und diese zu spezialisieren. Hier gibt jedoch eine schönere Lösung:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; struct result_tag {};

template &lt;typename T0, typename T1&gt;
T0 lexical_cast_(result_tag&lt;T0&gt;, T1 p_source) {
  T0 buffer;
  stringstream ss;
  ss &lt;&lt; p_source;
  ss &gt;&gt; buffer;
  return buffer;
}

template &lt;typename T1&gt; char *lexical_cast_(result_tag&lt;char *&gt;, T1 p_source) {
  stringstream ss;
  ss &lt;&lt; p_source;
  return &amp;ss.str()[0];
}

template &lt;typename T1&gt;
char const *lexical_cast_(result_tag&lt;char const *&gt;, T1 p_source) {
  stringstream ss;
  ss &lt;&lt; p_source;
  return &amp;ss.str()[0];
}

template &lt;typename T0, typename T1&gt; T0 lexical_cast(T1 p_source) {
  return lexical_cast(result_tag&lt;T0&gt;{}, p_source);
}
</code></pre>
<p>Dass dein Code sehr ineffizient ist, weil du alles per value übergibst dürfte dir hoffentlich bewusst sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356355</guid><dc:creator><![CDATA[overloard]]></dc:creator><pubDate>Sun, 29 Sep 2013 09:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 10:04:18 GMT]]></title><description><![CDATA[<p>Gibt es einen Grund, wieso du <code>boost::lexical_cast</code> neu erfindest?</p>
<p>P.S.: Hätten wir bloß <code>static if</code> ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356356</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 29 Sep 2013 10:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 10:12:50 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<blockquote>
<p>Gibt es einen Grund, wieso du boost::lexical_cast neu erfindest?</p>
</blockquote>
<p>Bestimmt...mir fällt nur gerade keiner ein <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="😃"
    /> .</p>
<p>So müsste doch die Funktion/en auch ohne struct gehen, oder?</p>
<pre><code>template &lt; typename T0 &gt; T0 lexical_cast (char * p_var) {
	T0 buffer;
	stringstream ss;
	ss &lt;&lt; p_var;
	ss &gt;&gt; buffer;
	return buffer;
};
template &lt; typename T0 &gt; T0 lexical_cast (char const * p_var) {
	T0 buffer;
	stringstream ss;
	ss &lt;&lt; p_var;
	ss &gt;&gt; buffer;
	return buffer;
};
template &lt; typename T1,typename T0 &gt; T1 lexical_cast (T0 p_var) {
	stringstream ss;
	ss &lt;&lt; p_var;
	return &amp; ss.str () [0];
};
</code></pre>
<p>Zwar immer noch ineffizient, aber funktionstüchtig.</p>
<p>Müsste ich eigentlich wissen <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="🙄"
    /> : Das ist nur eine Überladung, keine Spezialisierung, oder?</p>
<p>MfG</p>
<p>Seikuassi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356361</guid><dc:creator><![CDATA[PHBU]]></dc:creator><pubDate>Sun, 29 Sep 2013 10:12:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 10:46:40 GMT]]></title><description><![CDATA[<p>Niemand stört sich an</p>
<pre><code class="language-cpp">return &amp;ss.str()[0];
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356368</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 29 Sep 2013 10:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 10:58:02 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Niemand stört sich an</p>
<pre><code class="language-cpp">return &amp;ss.str()[0];
</code></pre>
<p>?</p>
</blockquote>
<p>Edit: Beziehst du dich gerade auf den neuesten Code-Schnipsel? Da ist es sowieso Blödsinn, aber ich dachte, auf solche offensichtlichen Kleinigkeiten würdest du nicht hinweisen, das ist doch unter deinem Niveau...</p>
<blockquote>
<p>Das ist nur eine Überladung, keine Spezialisierung, oder?</p>
</blockquote>
<p>Richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356370</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 29 Sep 2013 10:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 11:02:59 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Niemand stört sich an</p>
<pre><code class="language-cpp">return &amp;ss.str()[0];
</code></pre>
<p>?</p>
</blockquote>
<p>So genau habe ich mir den Code gar nicht angeschaut. Aber stimmt schon, ein Lexical-Cast nach const char* und char* ist prinzipiell gar nicht vernünftig umzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356372</guid><dc:creator><![CDATA[overloard]]></dc:creator><pubDate>Sun, 29 Sep 2013 11:02:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 15:11:46 GMT]]></title><description><![CDATA[<p>Natürlich, du meintest den ersten...</p>
<p>Und damit hat overloard Recht, das kann man tatsächlich nicht richtig umsetzen. Eine unschöne Möglichkeit wäre, den Zeiger in einem statischen Zeiger-Array zu speichern, welches per <code>at_exit</code> geleert wird (Edit: Das geht natürlich auch direkter, mit einem std::string o.ä.). Das sollte funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356376</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 29 Sep 2013 15:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 11:14:04 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Eine unschöne Möglichkeit wäre, den Zeiger in einem statischen Zeiger-Array zu speichern, welches per <code>at_exit</code> geleert wird. Das sollte funktionieren.</p>
</blockquote>
<p>Inwiefern ist das besser als ein Memory-Leak? (War eine rhetorische Frage: Es ist genauso schlecht, nur langsamer)</p>
<p>Und ich habe gesagt:</p>
<p>overloard schrieb:</p>
<blockquote>
<p>nicht vernünftig</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2356378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356378</guid><dc:creator><![CDATA[overloard]]></dc:creator><pubDate>Sun, 29 Sep 2013 11:14:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 11:23:57 GMT]]></title><description><![CDATA[<p>overloard schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Eine unschöne Möglichkeit wäre, den Zeiger in einem statischen Zeiger-Array zu speichern, welches per <code>at_exit</code> geleert wird. Das sollte funktionieren.</p>
</blockquote>
<p>Inwiefern ist das besser als ein Memory-Leak? (War eine rhetorische Frage: Es ist genauso schlecht, nur langsamer)</p>
</blockquote>
<p>Weil das Betriebssystem es sowieso aufräumt... nun gut, es gibt keine richtige Möglichkeit.</p>
<p>Aber: Man kann einen Zeiger <strong>nehmen</strong>. Das wäre hier der beste Lösungsweg.</p>
<blockquote>
<p>Und ich habe gesagt:</p>
<p>overloard schrieb:</p>
<blockquote>
<p>nicht vernünftig</p>
</blockquote>
</blockquote>
<p>Genau darauf bezog ich mich ja auch, es ist nicht <em>richtig</em> lösbar, also vernünftig. Eine <em>unschöne</em> Möglichkeit schlug ich vor, die eben unschön 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/2356381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356381</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 29 Sep 2013 11:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung Problem on Sun, 29 Sep 2013 11:33:48 GMT]]></title><description><![CDATA[<p>total nervig Sone ändert ständig den text seiner beiträge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356388</guid><dc:creator><![CDATA[komment]]></dc:creator><pubDate>Sun, 29 Sep 2013 11:33:48 GMT</pubDate></item></channel></rss>