<?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[CRTP, ist dies erlaubt?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche gerade etwas mit dem Curiously recurring template pattern rumzuspielen. Konkret geht es um folgendes:</p>
<pre><code class="language-cpp">template&lt;class Derived&gt;
struct Base{
    //Bar ist beliebige template magie
    typename Bar&lt;typename Derived::Foo&gt;::type x(){
        return Derived::Foo();
    }
};

class Derived:public Base&lt;Derived&gt;{
     struct Foo{...};
};

Derived d;
d.x();//definiert?
</code></pre>
<p>Konkret geht es mir um das Bar<a href="Derived::Foo" rel="nofollow">Derived::Foo</a>::type. Ich weiß, dass dies als define in Base unzulässig wäre, weil Derived zu dem Zeitpunkt incomplete ist. Andererseits wird x() erst viel später aufgerufen und der Compiler muss deswegen zu dem Zeitpunkt noch keinen Code für x() erzeugen.</p>
<p>und wie sieht es hiermit aus?</p>
<pre><code class="language-cpp">template&lt;class Derived&gt;
struct Base{
    template&lt;class T&gt;
    struct Foobar{...};

    typename Bar&lt;Foobar&lt;typename Derived::Foo&gt; &gt;::type x(){
        return Derived::Foo();
    }
};
</code></pre>
<p>Hierbei hängt sogar die innere Klasse von dem Typen ab.</p>
<p>Irgendein Standardprofi zugegen? <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="🙂"
    /> Gibt es da Faustregeln, was man darf und was nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290715/crtp-ist-dies-erlaubt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 10:00:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290715.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Aug 2011 06:27:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CRTP, ist dies erlaubt? on Tue, 02 Aug 2011 06:30:54 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche gerade etwas mit dem Curiously recurring template pattern rumzuspielen. Konkret geht es um folgendes:</p>
<pre><code class="language-cpp">template&lt;class Derived&gt;
struct Base{
    //Bar ist beliebige template magie
    typename Bar&lt;typename Derived::Foo&gt;::type x(){
        return Derived::Foo();
    }
};

class Derived:public Base&lt;Derived&gt;{
     struct Foo{...};
};

Derived d;
d.x();//definiert?
</code></pre>
<p>Konkret geht es mir um das Bar<a href="Derived::Foo" rel="nofollow">Derived::Foo</a>::type. Ich weiß, dass dies als define in Base unzulässig wäre, weil Derived zu dem Zeitpunkt incomplete ist. Andererseits wird x() erst viel später aufgerufen und der Compiler muss deswegen zu dem Zeitpunkt noch keinen Code für x() erzeugen.</p>
<p>und wie sieht es hiermit aus?</p>
<pre><code class="language-cpp">template&lt;class Derived&gt;
struct Base{
    template&lt;class T&gt;
    struct Foobar{...};

    typename Bar&lt;Foobar&lt;typename Derived::Foo&gt; &gt;::type x(){
        return Derived::Foo();
    }
};
</code></pre>
<p>Hierbei hängt sogar die innere Klasse von dem Typen ab.</p>
<p>Irgendein Standardprofi zugegen? <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="🙂"
    /> Gibt es da Faustregeln, was man darf und was nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100686</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 02 Aug 2011 06:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to CRTP, ist dies erlaubt? on Tue, 02 Aug 2011 11:36:44 GMT]]></title><description><![CDATA[<p>Nichts dagegen einzuwenden. Ob das Ganze tatsächlich funktioniert kann ohnehin erst bei der Instantiierung festgestellt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100790</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 02 Aug 2011 11:36:44 GMT</pubDate></item></channel></rss>