<?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[wie spezialisierung einer bestimmten funktion]]></title><description><![CDATA[<p>hola leute</p>
<p>hab da ein kleines problem mit einer spezialisierung.</p>
<p>hab derzeit foilgenden code:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t)
{
   if(is_pod&lt;T&gt;::type)  /* liefert true wenn T ein bestimmter datentyp ist */
      return write_to_stream(stream, t);
   else
      return write_to_stream_ex(stream, t);
}
</code></pre>
<p>ich schaetz mal das sogar der bcb in diesem fall je nach datentyp schon zur compile-zeit die richtige funktion (write_to_stream) auswaehlt. jedoch bekomme ich bei der funktion immer die stoerenden warnungen:<br />
'bedingung immer true' oder 'bedingung immer false' oder 'code wird nie erreicht'.<br />
jetzt dachte ich, das ich das vielleicht ueber eine spezialisierung machen koennte. aber irgendwie schaffe ich das nicht.<br />
write_to_stream(_ex) sieht folgend aus:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
unsigned int write_to_stream(char *stream, const T &amp;t)
{
   ...
}

template &lt;class T&gt;
unsigned int write_to_stream_ex(char *stream, const T &amp;t)
{
   ...
}
</code></pre>
<p>ich dachte nun das ich write_to_stream einfach spezialisiere:</p>
<pre><code class="language-cpp">template &lt;class T, bool b&gt;
unsigned int write_to_stream(char *stream, const T &amp;t);

template &lt;&gt;
unsigned int write_to_stream&lt;class T, true&gt;(char *stream, const T &amp;t)
{
   ...
}
</code></pre>
<p>aber scheinbar funktioniert das nicht ganz so wie ich mir das vorgestellt habe.<br />
kann das ueberhaupt so funktionieren wie ich mir das vorstelle ? oder muss ich da einen anderen weg einschlagen ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129248/wie-spezialisierung-einer-bestimmten-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:27:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129248.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Dec 2005 20:32:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Sun, 11 Dec 2005 20:32:58 GMT]]></title><description><![CDATA[<p>hola leute</p>
<p>hab da ein kleines problem mit einer spezialisierung.</p>
<p>hab derzeit foilgenden code:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t)
{
   if(is_pod&lt;T&gt;::type)  /* liefert true wenn T ein bestimmter datentyp ist */
      return write_to_stream(stream, t);
   else
      return write_to_stream_ex(stream, t);
}
</code></pre>
<p>ich schaetz mal das sogar der bcb in diesem fall je nach datentyp schon zur compile-zeit die richtige funktion (write_to_stream) auswaehlt. jedoch bekomme ich bei der funktion immer die stoerenden warnungen:<br />
'bedingung immer true' oder 'bedingung immer false' oder 'code wird nie erreicht'.<br />
jetzt dachte ich, das ich das vielleicht ueber eine spezialisierung machen koennte. aber irgendwie schaffe ich das nicht.<br />
write_to_stream(_ex) sieht folgend aus:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
unsigned int write_to_stream(char *stream, const T &amp;t)
{
   ...
}

template &lt;class T&gt;
unsigned int write_to_stream_ex(char *stream, const T &amp;t)
{
   ...
}
</code></pre>
<p>ich dachte nun das ich write_to_stream einfach spezialisiere:</p>
<pre><code class="language-cpp">template &lt;class T, bool b&gt;
unsigned int write_to_stream(char *stream, const T &amp;t);

template &lt;&gt;
unsigned int write_to_stream&lt;class T, true&gt;(char *stream, const T &amp;t)
{
   ...
}
</code></pre>
<p>aber scheinbar funktioniert das nicht ganz so wie ich mir das vorgestellt habe.<br />
kann das ueberhaupt so funktionieren wie ich mir das vorstelle ? oder muss ich da einen anderen weg einschlagen ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/939829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/939829</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sun, 11 Dec 2005 20:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Mon, 12 Dec 2005 14:50:58 GMT]]></title><description><![CDATA[<p>zeig mal die implementierung von is_pod<br />
...<br />
is_pod&lt;T&gt;::type in der if abfrage sieht ein bischen komisch aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940312</guid><dc:creator><![CDATA[Cpt. Tanga]]></dc:creator><pubDate>Mon, 12 Dec 2005 14:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Mon, 12 Dec 2005 16:06:52 GMT]]></title><description><![CDATA[<blockquote>
<p>kann das ueberhaupt so funktionieren wie ich mir das vorstelle ?</p>
</blockquote>
<p>Nein. Da man Funktionstemplates nicht partiell spezialisieren kann. Du kannst aber mit Überladung das Gewünschte erreichen:</p>
<pre><code class="language-cpp">template &lt;int&gt; 
struct Int2Type {};

// Für Non-Pods
template &lt;class T&gt;
unsigned int write_to_stream(char *stream, const T &amp;t, Int2Type&lt;0&gt;) {
    // ...
}

// Für Pods
template &lt;class T&gt;
unsigned int write_to_stream(char *stream, const T &amp;t, Int2Type&lt;1&gt;) {
    // ...
}
template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t)
{
   return write_to_stream(stream, t, Int2Type&lt;is_pod&lt;T&gt;::type&gt;());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940378</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 12 Dec 2005 16:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Mon, 12 Dec 2005 22:23:24 GMT]]></title><description><![CDATA[<p>re</p>
<p>danke fuer die hilfe. auf die moeglichkeit der ueberladung bin ich nicht gekommen.</p>
<p>Cpt. Tanga schrieb:</p>
<blockquote>
<p>zeig mal die implementierung von is_pod<br />
...<br />
is_pod&lt;T&gt;::type in der if abfrage sieht ein bischen komisch aus</p>
</blockquote>
<p>warum ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940701</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 12 Dec 2005 22:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 00:51:41 GMT]]></title><description><![CDATA[<p>wär nicht is_pod&lt;T&gt;::value logischer?</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<blockquote>
<p>kann das ueberhaupt so funktionieren wie ich mir das vorstelle ?</p>
</blockquote>
<p>Nein. Da man Funktionstemplates nicht partiell spezialisieren kann. Du kannst aber mit Überladung das Gewünschte erreichen:</p>
</blockquote>
<p>oder du baust dir einen funktor und spezialisierst diesen partiell. falls du sowieso einen brauchst (bzw. brauchen könntest) um ihn mit irgendwelchen algorithmen zu verwenden, ist das der elegantere weg. überladung ist praktischer (wobei ich heir noch SFINAE mittels enable_if benutzen würde, schliesslich soll die selektion ja automatisch erfolgen), falls du keine funktoren brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940733</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 13 Dec 2005 00:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 08:40:11 GMT]]></title><description><![CDATA[<p>re</p>
<p>hoi camper<br />
wie wuerde das mittels partiell spezialisierten functor ausssehen ?<br />
koenntest du mir das anhand eines beispiels mal zeigen ?<br />
enable_if is aus der boost-library ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940786</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 13 Dec 2005 08:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 09:22:20 GMT]]></title><description><![CDATA[<p>mit funktor:</p>
<pre><code class="language-cpp">//allgemein:
template&lt;class T, bool pod_opt&gt;
struct write_to_stream
{
    unsigned operator()(char* stream, const T&amp; t) const
    {
// ...
    }
};
// für pods:
template&lt;class T&gt;
struct write_to_stream&lt;T,true&gt;
{
    unsigned operator()(char* stream, const T&amp; t) const
    {
// ...
    }
};

template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t)
{
   return write_to_stream&lt;T,is_pod&lt;T&gt;::value&gt;()(stream, t);
}
</code></pre>
<p>per überladung (ja mit boost::enable_if, ich lasse jetzt mal boost:: weg):</p>
<pre><code class="language-cpp">// Für Non-Pods
template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t, typename disable_if_c&lt;is_pod&lt;T&gt;::value&gt;::type* = 0) {
    // ...
}
// Für Pods
template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t, typename enable_if_c&lt;is_pod&lt;T&gt;::value&gt;::type* = 0) {
    // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940806</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 13 Dec 2005 09:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 09:31:21 GMT]]></title><description><![CDATA[<p>Bist du dir 100%ig sicher das du sowas brauchst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940810</guid><dc:creator><![CDATA[sinn]]></dc:creator><pubDate>Tue, 13 Dec 2005 09:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 15:26:48 GMT]]></title><description><![CDATA[<p>re</p>
<p>die functorvariante is auch recht interessant. aber ich versteh da etwas nicht.<br />
weshalb funktioniert bei ner struct die part.spezialisierung &lt;T, true&gt; und bei ner funktion nicht ?<br />
und noch was:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
unsigned int WriteToStream(char *stream, const T &amp;t)
{
   return write_to_stream&lt;T,is_pod&lt;T&gt;::value&gt;()(stream, t);
}                                            ??
</code></pre>
<p>wieso steht ueber den ?? eine leere klammer ? irgendwie steh ich da auf der leitung</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941166</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 13 Dec 2005 15:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 15:43:14 GMT]]></title><description><![CDATA[<p>Die leere Klammer stellt den Constructor Aufruf da. Aber ich würde einfach Humes Methode bevorzugen.</p>
<p>@Sinn<br />
Natürlich braucht man solche Dinge. So kann man zB. sinnvoll optimieren oä.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941179</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Tue, 13 Dec 2005 15:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 16:50:09 GMT]]></title><description><![CDATA[<p>Ach ist doch alles nur Frickelei. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/941228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941228</guid><dc:creator><![CDATA[9]]></dc:creator><pubDate>Tue, 13 Dec 2005 16:50:09 GMT</pubDate></item><item><title><![CDATA[Reply to wie spezialisierung einer bestimmten funktion on Tue, 13 Dec 2005 17:22:40 GMT]]></title><description><![CDATA[<p>9 schrieb:</p>
<blockquote>
<p>Ach ist doch alles nur Frickelei. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
</blockquote>
<p>Nö, ist nur eine neue Methode zu denken, daran muss man sich eben erst gewöhnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941242</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Tue, 13 Dec 2005 17:22:40 GMT</pubDate></item></channel></rss>