<?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[Templatefunktion als Templateparameter]]></title><description><![CDATA[<p>Ich hab paar Templatefunktionen mit der gleichen Signatur:</p>
<pre><code>template &lt;typename T&gt;
void funcA();

template &lt;typename T&gt;
void funcB();
</code></pre>
<p>Jetzt habe ich eine etwas längere Funktion, die eine dieser Funktionen mit einem Typen, den sie kennt, instanziieren müsste. Pseudocode:</p>
<pre><code>template &lt;typename Func&gt;
void process()
{
  //code
  ...
  if (...) {
    Func&lt;int&gt;();
  }
}
</code></pre>
<p>Es gibt sagen wir so 10 Funktionen, die hier in Frage kommen, und die sollten an process als Parameter übergeben werden, und process instanziiert sie dann mit verschiedenen Typen.<br />
Ich wüsste grad nicht, wie ich das vereinheitlichen könnte, außer mit einem Macro. Irgendwelche Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338834/templatefunktion-als-templateparameter</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 02:52:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338834.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jul 2016 20:41:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 20:41:51 GMT]]></title><description><![CDATA[<p>Ich hab paar Templatefunktionen mit der gleichen Signatur:</p>
<pre><code>template &lt;typename T&gt;
void funcA();

template &lt;typename T&gt;
void funcB();
</code></pre>
<p>Jetzt habe ich eine etwas längere Funktion, die eine dieser Funktionen mit einem Typen, den sie kennt, instanziieren müsste. Pseudocode:</p>
<pre><code>template &lt;typename Func&gt;
void process()
{
  //code
  ...
  if (...) {
    Func&lt;int&gt;();
  }
}
</code></pre>
<p>Es gibt sagen wir so 10 Funktionen, die hier in Frage kommen, und die sollten an process als Parameter übergeben werden, und process instanziiert sie dann mit verschiedenen Typen.<br />
Ich wüsste grad nicht, wie ich das vereinheitlichen könnte, außer mit einem Macro. Irgendwelche Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502246</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 13 Jul 2016 20:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 20:56:34 GMT]]></title><description><![CDATA[<p>Du kannst Templates als Templateargumente übergeben. Schau mal hier: <a href="http://en.cppreference.com/w/cpp/language/template_parameters" rel="nofollow">http://en.cppreference.com/w/cpp/language/template_parameters</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502247</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Wed, 13 Jul 2016 20:56:34 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 21:02:34 GMT]]></title><description><![CDATA[<p>Was hat es mit meiner Frage zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502248</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 13 Jul 2016 21:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 21:29:54 GMT]]></title><description><![CDATA[<p>Du hast 10 Funktionstemplates, die du jeweils an 'process' übergeben möchtest, welche dort instanziiert und aufgerufen werden. Richtig? Inwiefern ist meine Antwort unpassend? Auf der Seite wird unter anderem gezeigt, wie (Funktions-)Templates wiederum als Templateargument benutzt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502259</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Wed, 13 Jul 2016 21:29:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 21:44:00 GMT]]></title><description><![CDATA[<p>Techel schrieb:</p>
<blockquote>
<p>Du hast 10 Funktionstemplates, die du jeweils an 'process' übergeben möchtest, welche dort instanziiert und aufgerufen werden. Richtig?</p>
</blockquote>
<p>Mir ist nicht klar, wie das mit Funktionen gehen soll... Wenn das eine Klasse wäre, wärs ja kein Problem. Kann aber auch sein, dass ich grad komplett auf dem Schlauch stehe.<br />
Wenn dir das klar ist, kannst du ein konkretes Beispiel zusammenschreiben? Dann seh ichs evtl. auch, wenn wir aneinander vorbeigeredet haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502262</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 13 Jul 2016 21:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 22:05:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename Func, typename... Args&gt;
void f(Func&amp;&amp; fx, Args&amp;&amp;... arguments){
    fx(std::forward&lt;Args&gt;(arguments)...);
}
</code></pre>
<p>So kannst du jede beliebige Funktion, mitsamt seinen Argumenten an eine Funktion übergeben.<br />
Vorausgesetzt du benutzt C++11.</p>
<p>Du kannst auch std::function mit std::bind benutzen.<br />
Das sieht dann so aus:</p>
<pre><code class="language-cpp">#include &lt;functional&gt;

void f(std::function&lt;void()&gt; fx){
    fx();
}

void f1(int) {}
void f2(int, float) {}
template&lt;typename&gt; void f3(int) {}

int main(){
    f(std::bind(f1, 10));
    f(std::bind(f2, 10, 10.f));
    f(std::bind(f3&lt;int&gt;, 10));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2502267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502267</guid><dc:creator><![CDATA[electronics]]></dc:creator><pubDate>Wed, 13 Jul 2016 22:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 22:14:54 GMT]]></title><description><![CDATA[<p>Das ganze soll jedoch sicher statisch zur Compilierzeit sein.<br />
Ich war wohl doch etwas voreilig, mit Funktionstemplates als Templateargument geht es doch nicht so wie gewollt. Du musst somit die Funktion in eine Klasse wrappen, aber das sollte sicher kein Problem sein: <a href="http://ideone.com/wb5VDa" rel="nofollow">http://ideone.com/wb5VDa</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502268</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Wed, 13 Jul 2016 22:14:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templatefunktion als Templateparameter on Wed, 13 Jul 2016 22:21:33 GMT]]></title><description><![CDATA[<p>electronics schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ist schon klar. Ich hab aber nicht &quot;die ganze&quot; Funktion. Ich weiß grad ehrlich gesagt nicht, was die richtigen Bezeichnungen dafür wären...<br />
Bei einem f&lt;int&gt; habe ich das f, das will ich übergeben, und die Funktion an die ich das übergebe, kennt das int, ich aber nicht.</p>
<p>Techel schrieb:</p>
<blockquote>
<p>Du musst somit die Funktion in eine Klasse wrappen, aber das sollte sicher kein Problem sein</p>
</blockquote>
<p>Ich glaub, das geht... Das war glaub ich genau mein Denkfehler.<br />
Das Problem ist, und das hatte ich nicht erwähnt, ich will die Funktion nicht aufrufen, ich brauche dann den Funktionszeiger. Deswegen bin ich nicht auf die Lösung gekommen, das in eine Klasse zu wrappen. Aber wenn ich die Funktion in der Klasse statisch mache, sollte das mit dem Funktionszeiger immer noch passen.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502269</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 13 Jul 2016 22:21:33 GMT</pubDate></item></channel></rss>