<?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[Konvertierung von Template Klasse?]]></title><description><![CDATA[<p>Ich habe eine einfache Template Klasse und möchte gerne eine Variable dieser Klasse vom Typ int nach float umwandeln. Mein bisheriger Versuch dazu ist</p>
<pre><code class="language-cpp">template &lt; typename T &gt;
struct Position {
    T x;
    T y;

    Position() {}
    Position(T px, T py) { x = px; y = py; }

    operator Position&lt;float&gt;(Position&lt;int&gt; const &amp;orig) {
        return ( Position&lt;float&gt;(float(orig.x), float(orig.y)) );
    }
};
</code></pre>
<p>Allerdings schmeißt mir gcc</p>
<pre><code>error: ‘Position&lt;T&gt;::operator Position&lt;float&gt;(const Position&lt;int&gt;&amp;)’ must take ‘void’
</code></pre>
<p>entgegen. Daraus kann ich leider keinen Sinn entnehmen, da wenn die Funktion &quot;void&quot; als Argument nehmen würde könnte ja nichts umgewandelt werden (oder miss interpretiere ich das gänzlich)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271192/konvertierung-von-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 15:54:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271192.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Jul 2010 13:40:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konvertierung von Template Klasse? on Sat, 24 Jul 2010 13:40:26 GMT]]></title><description><![CDATA[<p>Ich habe eine einfache Template Klasse und möchte gerne eine Variable dieser Klasse vom Typ int nach float umwandeln. Mein bisheriger Versuch dazu ist</p>
<pre><code class="language-cpp">template &lt; typename T &gt;
struct Position {
    T x;
    T y;

    Position() {}
    Position(T px, T py) { x = px; y = py; }

    operator Position&lt;float&gt;(Position&lt;int&gt; const &amp;orig) {
        return ( Position&lt;float&gt;(float(orig.x), float(orig.y)) );
    }
};
</code></pre>
<p>Allerdings schmeißt mir gcc</p>
<pre><code>error: ‘Position&lt;T&gt;::operator Position&lt;float&gt;(const Position&lt;int&gt;&amp;)’ must take ‘void’
</code></pre>
<p>entgegen. Daraus kann ich leider keinen Sinn entnehmen, da wenn die Funktion &quot;void&quot; als Argument nehmen würde könnte ja nichts umgewandelt werden (oder miss interpretiere ich das gänzlich)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931039</guid><dc:creator><![CDATA[Lupinius]]></dc:creator><pubDate>Sat, 24 Jul 2010 13:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von Template Klasse? on Sat, 24 Jul 2010 13:44:37 GMT]]></title><description><![CDATA[<p>Der Operator ist Member der Klasse. dh, du hast ja this in dem Operator drinnen. Und this sollst du umwandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931042</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 24 Jul 2010 13:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von Template Klasse? on Sat, 24 Jul 2010 13:49:05 GMT]]></title><description><![CDATA[<p>Die Konvertierungsoperatoren nehmen grundsätzlich keine Parameter (wäre auch sehr unsinnig). Also z.B.</p>
<pre><code class="language-cpp">class X
{
    int i;
public:
    operator int() { return i; }
};
</code></pre>
<p>Jetzt kannst du <code>X x</code> z.B. in <code>int i = x</code> verwenden. Ein Parameter wäre hier sehr seltsam.</p>
<p>Wenn du den Konvertierungsoperator nur bei <code>Position&lt;int&gt;</code> haben willst, musst du entweder eine Spezialisierung für <code>int</code> schreiben oder mit <code>boost::enable_if</code> o.ä. arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931043</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sat, 24 Jul 2010 13:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von Template Klasse? on Sat, 24 Jul 2010 13:58:48 GMT]]></title><description><![CDATA[<p>Das macht man so:</p>
<pre><code class="language-cpp">#include &lt;boost/type_traits/is_convertible.hpp&gt;
#include &lt;boost/utility/enable_if.hpp&gt;

template&lt;typename T&gt;
struct point2d
{
  T x, y;

  explicit point2d(T x = T(), T y = T()) : x(x), y(y) {}

  template&lt;typename U&gt;
  point2d(point&lt;U&gt; const&amp; p,
    typename boost::enable_if&lt; boost::is_convertible&lt;U,T&gt; &gt;::type* =0)
  : x(p.x), y(p.y) {}
};
</code></pre>
<p>(ungetestet)</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931045</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 24 Jul 2010 13:58:48 GMT</pubDate></item></channel></rss>