<?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[Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden]]></title><description><![CDATA[<p>...richtig schwer einen passenden Titel zu finden.<br />
Also, was ich habe ist folgendes:</p>
<pre><code>template &lt;typename Ret, typename ... Args&gt;
            void trampoline_function(Ret (*fnc) (Args...), iterator iter)
{
   auto result = fnc(iter.get&lt;Args&gt;()...);
   ...
}
</code></pre>
<p>fnc wird mit den Argument aufgerufen, auf das iter zeigt. iterator ist dabei ein Iteratortyp, der über rohen Speicher iteriert und ihn dabei entsprechend dem Templateargument interpretiert*. Das Problem ist jedoch, dass der iterator bei jedem Aufruf von get bewegt wird. Und die Auswertungsreihenfolge von Funktionsargumenten ist dummerweise nicht spezifiziert, weswegen ich hier Probleme bekomme.<br />
Wie mache ich das, dass der erste Aufruf von get() mit dem ersten Argument der Funktion übereinstimmt und der zweite mit dem zweiten etc.?<br />
Ich muss die Argumente schätz ich mal i-wie in einem Tuple zwischenspeichern, dass ich dann initialisiere und dann wieder auspacke, oder? Aber dafür bin ich zu blöd.</p>
<p>*Auch wenn das jetzt nicht ganz so schön klingt: der Teil funktioniert einwandfrei.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325187/elemente-an-funktionspointer-mit-variabler-anzahl-an-argumenten-forwarden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 14:44:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325187.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Apr 2014 17:37:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Fri, 18 Apr 2014 17:37:53 GMT]]></title><description><![CDATA[<p>...richtig schwer einen passenden Titel zu finden.<br />
Also, was ich habe ist folgendes:</p>
<pre><code>template &lt;typename Ret, typename ... Args&gt;
            void trampoline_function(Ret (*fnc) (Args...), iterator iter)
{
   auto result = fnc(iter.get&lt;Args&gt;()...);
   ...
}
</code></pre>
<p>fnc wird mit den Argument aufgerufen, auf das iter zeigt. iterator ist dabei ein Iteratortyp, der über rohen Speicher iteriert und ihn dabei entsprechend dem Templateargument interpretiert*. Das Problem ist jedoch, dass der iterator bei jedem Aufruf von get bewegt wird. Und die Auswertungsreihenfolge von Funktionsargumenten ist dummerweise nicht spezifiziert, weswegen ich hier Probleme bekomme.<br />
Wie mache ich das, dass der erste Aufruf von get() mit dem ersten Argument der Funktion übereinstimmt und der zweite mit dem zweiten etc.?<br />
Ich muss die Argumente schätz ich mal i-wie in einem Tuple zwischenspeichern, dass ich dann initialisiere und dann wieder auspacke, oder? Aber dafür bin ich zu blöd.</p>
<p>*Auch wenn das jetzt nicht ganz so schön klingt: der Teil funktioniert einwandfrei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395320</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 18 Apr 2014 17:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Fri, 18 Apr 2014 18:10:53 GMT]]></title><description><![CDATA[<p>Wozu überhaupt dieser Iterator?</p>
<pre><code>template &lt;typename Ret, typename ... Args&gt;
            void trampoline_function(Ret (*fnc) (Args...), Args&amp;&amp;... args)
{
   auto result = fnc(std::forward&lt;Args&gt;(args)...);
   ...
}
</code></pre>
<p>Oder darf trampolin_function nur zwei Argument haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395324</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 18 Apr 2014 18:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Fri, 18 Apr 2014 18:12:45 GMT]]></title><description><![CDATA[<p>Nee, der Iterator ist leider notwendig. Mir liegen die Argumente nämlich nur in roher Speicherform vor. Ich muss die konvertieren und an die Funktion weiterleiten. Die Konvertierung erledigt der Iterator und die Weiterleitung die Trampolin-Funktion. Da hakts aber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395325</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 18 Apr 2014 18:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Fri, 18 Apr 2014 21:13:22 GMT]]></title><description><![CDATA[<p>Die Idee ist aber nicht verkehrt</p>
<pre><code class="language-cpp">template &lt;typename Ret, typename ... Args&gt;
            void trampoline_function(Ret (*fnc) (Args...), iterator iter)
{
   struct helper
   {
       helper(Ret (*fnc) (Args...), Args&amp;&amp;... args)
          : ret(fnc(std::forward&lt;Args&gt;(args)...))
       {}
       Ret ret;
   } help{iter.get&lt;Args&gt;()...};
   auto result = help.ret;
   ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395370</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 18 Apr 2014 21:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Sat, 19 Apr 2014 02:37:27 GMT]]></title><description><![CDATA[<p>Und dabei ist die Ausführungsreihenfolge garantiert?<br />
Wenn ja, dann danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395387</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 19 Apr 2014 02:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to Elemente an Funktionspointer mit variabler Anzahl an Argumenten forwarden on Sat, 19 Apr 2014 06:45:34 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Und dabei ist die Ausführungsreihenfolge garantiert?</p>
</blockquote>
<p>Natürlich. Der Trick ist so einfach, ich dachte, da wärst du locker selbst drauf gekommen - in Initialisierungslisten ist es klar definiert, unabhängig vom Kontext:</p>
<blockquote>
<p>Within the <em>initializer-list</em> of a <em>braced-init-list</em>, the <em>initializer-clauses</em>, <strong>including any that result from pack expansions (14.5.3),</strong> are evaluated in the order in which they appear. That is, every value computation and side effect associated with a given <em>initializer-clause</em> is sequenced before every value computation and side effect associated with any <em>initializer-clause</em> that follows it in the comma-separated list of the <em>initializer-list</em>.<br />
[ Note: This evaluation ordering holds regardless of the semantics of the initialization; <strong>for example, it applies when the elements of the <em>initializer-list</em> are interpreted as arguments of a constructor call, even though ordinarily there are no sequencing constraints on the arguments of a call.</strong> — end note ]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2395393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395393</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Apr 2014 06:45:34 GMT</pubDate></item></channel></rss>