<?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[GCC und (nicht-variadische) Template-Rekursion]]></title><description><![CDATA[<p>Hallo,</p>
<p>könnte mir vielleicht jemand erklären, wieso das hier:</p>
<pre><code>template&lt;typename T&gt;
static std::string decompose()
{
        if(boost::is_pointer&lt;T&gt;())
            return decompose&lt;VM, boost::remove_pointer&lt;T&gt; &gt;();
        if(boost::is_const&lt;T&gt;())
            return decompose&lt;VM, boost::remove_const&lt;T&gt; &gt;();
        if(boost::is_reference&lt;T&gt;())
            return decompose&lt;VM, boost::remove_reference&lt;T&gt; &gt;();
        return &quot;Nix mehr zu machen.&quot;;
}
</code></pre>
<p>meinen Compiler in einer Endlosschleife arbeiten lässt? Ich denke mal, das hat was mit der Deduktion der remove_* Templates von Boost zu tun, bin damit aber nicht genug vertraut, als dass ich jetzt mehr als eine vage Ahnung habe.</p>
<p>Wär toll, wenn Ihr mir weiterhelfen könntet!</p>
<p>Edit: Ach so, vielleicht noch allgemein zur Erklärung, was das da oben machen soll... Man gibt einen beliebigen Typen als Template-Parameter an und die Funktion soll dann alle Qualifier und andere Dekorationen entfernen. Aus 'volatile const int*&amp;' soll einfach nur 'int' werden z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311497/gcc-und-nicht-variadische-template-rekursion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 14:16:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311497.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Dec 2012 20:44:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to GCC und (nicht-variadische) Template-Rekursion on Thu, 06 Dec 2012 20:46:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>könnte mir vielleicht jemand erklären, wieso das hier:</p>
<pre><code>template&lt;typename T&gt;
static std::string decompose()
{
        if(boost::is_pointer&lt;T&gt;())
            return decompose&lt;VM, boost::remove_pointer&lt;T&gt; &gt;();
        if(boost::is_const&lt;T&gt;())
            return decompose&lt;VM, boost::remove_const&lt;T&gt; &gt;();
        if(boost::is_reference&lt;T&gt;())
            return decompose&lt;VM, boost::remove_reference&lt;T&gt; &gt;();
        return &quot;Nix mehr zu machen.&quot;;
}
</code></pre>
<p>meinen Compiler in einer Endlosschleife arbeiten lässt? Ich denke mal, das hat was mit der Deduktion der remove_* Templates von Boost zu tun, bin damit aber nicht genug vertraut, als dass ich jetzt mehr als eine vage Ahnung habe.</p>
<p>Wär toll, wenn Ihr mir weiterhelfen könntet!</p>
<p>Edit: Ach so, vielleicht noch allgemein zur Erklärung, was das da oben machen soll... Man gibt einen beliebigen Typen als Template-Parameter an und die Funktion soll dann alle Qualifier und andere Dekorationen entfernen. Aus 'volatile const int*&amp;' soll einfach nur 'int' werden z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277975</guid><dc:creator><![CDATA[TdZ]]></dc:creator><pubDate>Thu, 06 Dec 2012 20:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to GCC und (nicht-variadische) Template-Rekursion on Thu, 06 Dec 2012 20:57:06 GMT]]></title><description><![CDATA[<p>Also probierst du ein <code>boost::decay</code> zu schreiben?</p>
<p>Deinen Code ist übrigens etwas seltsam, was ist VM wieso gibst du einen string zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277977</guid><dc:creator><![CDATA[dekade]]></dc:creator><pubDate>Thu, 06 Dec 2012 20:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to GCC und (nicht-variadische) Template-Rekursion on Thu, 06 Dec 2012 21:22:14 GMT]]></title><description><![CDATA[<p>decay kannte ich noch gar nicht, dank Dir für den Tip! Allerdings ist das nicht ganz das, was ich suche. Ich habe mittlerweile den Fehler gefunden: Die Reihenfolge der Qualifier war nicht ganz richtig, dann braucht man gar keine Rekursion. So funktioniert es jetzt erstmal:</p>
<pre><code>template&lt;class VM, typename T&gt;
    static String fullName()
    {
        typedef typename boost::decay&lt;typename boost::remove_all_extents&lt;typename boost::remove_const&lt;typename boost::remove_pointer&lt;typename boost::remove_reference&lt;T&gt;::type&gt;::type&gt;::type&gt;::type&gt;::type DecomposedType;

        String name = TypeInfo::name&lt;VM, DecomposedType &gt;();

        bool isPointer = boost::is_pointer&lt;typename boost::remove_reference&lt;T&gt;::type&gt;();
        bool isConst = boost::is_const&lt;typename boost::remove_pointer&lt;typename boost::remove_reference&lt;T&gt;::type&gt;::type&gt;();
        bool isReference = boost::is_reference&lt;T&gt;();

        if(!TypeInfo::isValid&lt;VM,DecomposedType&gt;())
            return &quot;&quot;;

        return TypeInfo::combined&lt;VM&gt;(name, isConst, isReference, isPointer);
    }
</code></pre>
<p>Das VM und der Funktionsname waren irrelevant, daher bin ich nicht weiter drauf eingegangen. Das hier ist jetzt die Funktion direkt aus dem Quellcode. Mega umständlich und funktioniert nur für recht primitive Typen. Egal, das reicht mir erstmal.</p>
<p>VM ist ein Template Parameter für die Virtual Machine, das gehört nämlich zu einem Binding-Utility für meine Script-Engine.</p>
<p>Danke nochmal, dass Du mich auf die richtige Fährte gebracht hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2277985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2277985</guid><dc:creator><![CDATA[TdZ]]></dc:creator><pubDate>Thu, 06 Dec 2012 21:22:14 GMT</pubDate></item></channel></rss>