<?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-Funktion ruft Template-Funktion auf]]></title><description><![CDATA[<p>Ich will aus einer Template-Funktion eine andere Template-Funktion aufrufen:</p>
<pre><code class="language-cpp">template&lt;typename T, typename S&gt;
S* foo() {
 S* res= bar&lt;T,S&gt;();
 ...
 return res;
}

template &lt;typename T, typename S&gt;
S* bar() {
 S* res;
 ...
 return res;
}
</code></pre>
<p>Wobei T ein &quot;struct&quot; ist was auch aus nem Template erzeugt wird (falls das ein Problem ist).</p>
<p>Bitte sagt mir nicht dass das nicht geht, hatte mich so gefreut meine vielen Funktionen los zu sein und das durch Templates zu lösen <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/topic/285246/template-funktion-ruft-template-funktion-auf</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:27:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285246.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Apr 2011 21:13:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sat, 16 Apr 2011 21:31:55 GMT]]></title><description><![CDATA[<p>Ich will aus einer Template-Funktion eine andere Template-Funktion aufrufen:</p>
<pre><code class="language-cpp">template&lt;typename T, typename S&gt;
S* foo() {
 S* res= bar&lt;T,S&gt;();
 ...
 return res;
}

template &lt;typename T, typename S&gt;
S* bar() {
 S* res;
 ...
 return res;
}
</code></pre>
<p>Wobei T ein &quot;struct&quot; ist was auch aus nem Template erzeugt wird (falls das ein Problem ist).</p>
<p>Bitte sagt mir nicht dass das nicht geht, hatte mich so gefreut meine vielen Funktionen los zu sein und das durch Templates zu lösen <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/2050352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050352</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Sat, 16 Apr 2011 21:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sat, 16 Apr 2011 21:24:36 GMT]]></title><description><![CDATA[<p>Klar geht das - der Compiler muß nur an der richtigen Stelle wissen, wie die Funktion bar() aussieht. Die einfache Lösung ist es, die beiden Funktionen zu vertauschen.<br />
(alternativ reicht auch eine Forward-Deklaration der Funktion bar())</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050358</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 16 Apr 2011 21:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 07:14:20 GMT]]></title><description><![CDATA[<p>Ich habe die Funktionen vertauscht. Der Fehler mit dem Template-Aufruf ist jetzt weg (dafür habe ich jetzt andere &quot;tolle&quot; Fehler). Allerdings war es nicht das Vertauschen, sondern der Parser (von g++ und clang++) kann keine Makros innerhalb von Templates (genauer einen Template-Aufruf) auflösen.</p>
<p>Als Bsp:</p>
<pre><code class="language-cpp">MAKRO(foo&lt;T,S,basis&gt;());
</code></pre>
<p>Das gibt nen Fehler, das man dem Makro zu viele Parameter übergeben hat (und/oder noch andere schöne Fehler).</p>
<p>Schreibt man allerdings:</p>
<pre><code class="language-cpp">MAKRO((foo&lt;T,S,basis&gt;()));
</code></pre>
<p>Funktioniert das ganze. Ich würde das ja als Bug bezeichnen, aber ist bestimmt ein &quot;Feature&quot; bzw. Standardkonform <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/2050410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050410</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Sun, 17 Apr 2011 07:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 07:22:33 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich würde das ja als Bug bezeichnen, aber ist bestimmt ein &quot;Feature&quot; bzw. Standardkonform <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>
</blockquote>
<p>Ich würde es einfach als einen weiteren Beweis ansehen, daß der Präprozessor überschätzt wird <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="😃"
    /><br />
(der Präprozessor wurde afaik unverändert von C übernommen und hat deshalb keine Ahnung von neuen Features aus C++)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050411</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 17 Apr 2011 07:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 07:25:08 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>der Präprozessor wurde afaik unverändert von C übernommen und hat deshalb keine Ahnung von neuen Features aus C++</p>
</blockquote>
<p>Das wäre ja eine Ausrede für g++, aber nicht für clang++! Die bei LLVM hätten das doch wenigstens richtig machen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050413</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Sun, 17 Apr 2011 07:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 08:18:16 GMT]]></title><description><![CDATA[<p>Ich rede jetzt nicht vom Präprozessor eines bestimmten Compilers, sondern vom Konzept &quot;Präprozessor&quot;, wie es im C++ Standard verwendet wird. Aber hier laufen auch einige Kollegen herum, die den Standard auwendig kennen und dir auf Wunsch genau die Passage zitieren, die das Phänomen beschreibt/erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050429</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 17 Apr 2011 08:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 09:11:53 GMT]]></title><description><![CDATA[<p>Das ist dann ja Fail-By-Design <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/2050454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050454</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Sun, 17 Apr 2011 09:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Funktion ruft Template-Funktion auf on Sun, 17 Apr 2011 09:22:37 GMT]]></title><description><![CDATA[<p>Der Präprozessor funktioniert ganz einfach: Er erkennt Kommas als Separatoren zwischen den einzelnen Argumenten. Da die Template-Syntax mit den spitzen Klammern zur Präprozessorzeit noch keine Bedeutung hat, wird sie ignoriert.</p>
<p>Zum Beispiel könnte auch jemand auf die Idee kommen, Operatoren zu übergeben. Und warum sollte</p>
<pre><code class="language-cpp">MAKRO(&lt;, &gt;)
</code></pre>
<p>sich anders verhalten als</p>
<pre><code class="language-cpp">MAKRO(a, b)
</code></pre>
<p>? Durch zusätzliche Klammerung mit <code>()</code> kannst du den Präprozessor allerdings darauf hinweisen, dass damit nur ein Argument gemeint ist. Aber das funktioniert nicht immer. Mit C++0x und Variadic Macros gibt es ein paar Situationen mehr, die funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2050467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2050467</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 17 Apr 2011 09:22:37 GMT</pubDate></item></channel></rss>