<?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[variadic template]]></title><description><![CDATA[<p>hola leute</p>
<p>moechte eine funktion mit variabler anzahl an parametern schreiben. das soll vereinfacht so aussehen:</p>
<pre><code>template&lt;class T, typename... Args&gt;
int* my_function(const T &amp;var, Args... args)
{
   static const int count = param_count_of_args(args);
   static int buffer[count];

   for(int i = 0; &lt; count;++i)
   {
      buffer[i] = to_string(args[i]).len();
   }

   return buffer;
}
</code></pre>
<p>ich brauch also die anzahl der parameter und muss auf die einzelnen parameter zugreifen koennen.<br />
ich hab leider von den variadics noch ueberhaupt keinen schimmer.</p>
<p>kanns mir jemand erklaeren ?</p>
<p>danke</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333695/variadic-template</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 18:21:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333695.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Jul 2015 20:34:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 20:34:18 GMT]]></title><description><![CDATA[<p>hola leute</p>
<p>moechte eine funktion mit variabler anzahl an parametern schreiben. das soll vereinfacht so aussehen:</p>
<pre><code>template&lt;class T, typename... Args&gt;
int* my_function(const T &amp;var, Args... args)
{
   static const int count = param_count_of_args(args);
   static int buffer[count];

   for(int i = 0; &lt; count;++i)
   {
      buffer[i] = to_string(args[i]).len();
   }

   return buffer;
}
</code></pre>
<p>ich brauch also die anzahl der parameter und muss auf die einzelnen parameter zugreifen koennen.<br />
ich hab leider von den variadics noch ueberhaupt keinen schimmer.</p>
<p>kanns mir jemand erklaeren ?</p>
<p>danke</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460876</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Fri, 24 Jul 2015 20:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 20:43:04 GMT]]></title><description><![CDATA[<ol>
<li>
<p>sizeof...(Args) // yields amount of parameters.</p>
</li>
<li>
<p>Quick and Dirty weg: (falscher weg)</p>
</li>
</ol>
<pre><code>template &lt;typename... List&gt;
void f (List... params) {
    std::tuple &lt;List...&gt; tup {params...};
    std::cout &lt;&lt; std::get &lt;0&gt; (tup) &lt;&lt; &quot;\n&quot;;
}

int main()
{
    f(2);
}
</code></pre>
<p>Es wäre jedoch möglicherweise empfehlenswerter es über quasi Rekursion zu machen.<br />
EDIT: Und zwar sobald du merkst, dass du mit einer Schleife std::get &lt;i&gt; nicht hinbekommen wirst <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>
<p>// better use forwarding and &amp;&amp;, but I am lazy to type.</p>
<pre><code>template &lt;typename Head, typename... Tail&gt;
void f (Head first, Tail... rest) { 
    // do something with first...
    f &lt;Tail...&gt; (rest...); // now the rest
}

// Ende der Instanziierungen
void f() { /* nothing */ }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2460877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460877</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 24 Jul 2015 20:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 21:46:25 GMT]]></title><description><![CDATA[<p>Warum dieses komische Konstrukt mit der static Variable? So ginge es viel einfacher und ohne Rekursion:</p>
<pre><code>template &lt;class... Args&gt;
std::vector&lt;size_t&gt; my_function(Args... args)
{
  return { to_string(args).length()... };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2460890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460890</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Fri, 24 Jul 2015 21:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 22:40:34 GMT]]></title><description><![CDATA[<p>sollte nur pseudo-code sein der zeigt um welche funktionalitaet es mir geht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460891</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Fri, 24 Jul 2015 22:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 23:53:38 GMT]]></title><description><![CDATA[<p>also ich hab da keinen plan wie mir da die rekursion helfen soll.<br />
bin da hoffnungslos verloren.<br />
koenntest du mir das bitte erklaeren ?</p>
<p>danke</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460894</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Fri, 24 Jul 2015 23:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Fri, 24 Jul 2015 23:59:09 GMT]]></title><description><![CDATA[<p>Geht es eigentlich nur darum, die Anzahl der Dezimalstellen von ein paar ints rauszufinden? Wie genau willst du die gewonnenen Werte denn weiterverwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460895</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 24 Jul 2015 23:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:18:30 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Geht es eigentlich nur darum, die Anzahl der Dezimalstellen von ein paar ints rauszufinden? Wie genau willst du die gewonnenen Werte denn weiterverwenden?</p>
</blockquote>
<p>das ist ein reines pseudo beispiel, das verdeutlichen soll , um welche funktionalitaet es mir geht.<br />
der code ist frei aus der luft gegriffen.</p>
<p>mir geht es darum das ich die anzahl der arbgumente rausfinde (das weiß ich nun schon) und dann muss ich ueber eine loop mit jedem der unterschiedlichen parameter etwas machen.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460896</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:27:38 GMT]]></title><description><![CDATA[<p>Loopen geht nicht einfach so, du musst die Argumente rekursiv abschälen wie in dem Beispiel von 5cript, d.h. du machst dein Template so, dass du Zugriff auf das erste Argument und den Rest bekommst. Dann kannst du mit dem ersten Argument was tun und den Rest behandelst du, indem du ihn z.B. zurück in das selbe Template leitest, welches dann den nächsten Parameter (ersten Parameter vom Rest) behandelt usw.</p>
<pre><code class="language-cpp">void f();

template &lt;typename Head, typename... Tail&gt;
void f(Head&amp;&amp; head, Tail&amp;&amp;... tail)
{
  // do smth with head

  f(tail...);  // handle remaining arguments
}

void f()
{
  // done
}

int main()
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2460897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460897</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:27:38 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:32:42 GMT]]></title><description><![CDATA[<p>somit haben wir ja wieder das problem. ich weiß nicht wie mir die rekursion nuetzlich sein soll. ich muss alle parameter in dem selben funktionsaufruf abarbeiten.<br />
ansonsten brauch ich die variadic templates nicht. sonst koennte ich das mit<br />
einer klasse genau so tun:</p>
<pre><code>meine_klasse klasse;
klasse(int_var)(string_var)(bool_var)(float_var);
</code></pre>
<p>in dem fall haette ich dann den operator() als template gemacht.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460898</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:36:40 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>somit haben wir ja wieder das problem. ich weiß nicht wie mir die rekursion nuetzlich sein soll. ich muss alle parameter in dem selben funktionsaufruf abarbeiten.</p>
</blockquote>
<p>Das geht leider nicht einfach so.</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>ansonsten brauch ich die variadic templates nicht. sonst koennte ich das mit<br />
einer klasse genau so tun:</p>
<pre><code>meine_klasse klasse;
klasse(int_var)(string_var)(bool_var)(float_var);
</code></pre>
<p>in dem fall haette ich dann den operator() als template gemacht.</p>
</blockquote>
<p>Und wie genau würdest du damit dann alle Parameter in der selben Funktion bearbeiten? <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/2460900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460900</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:36:40 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:39:00 GMT]]></title><description><![CDATA[<p>lies mal genau durch. ich hab geschrieben das ich es so machen koennte wenn ich<br />
nicht auf alle parameter in der selben funktion zugreifen koennen muesste <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/2460901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460901</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 00:43:04 GMT]]></title><description><![CDATA[<p>Das Grundproblem ist: Die Parameter haben nicht notwendigerweise alle den selben Typ, damit wird's rein prinzipiell schonmal schwer, die mit einer Schleife zu bearbeiten... <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/2460902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460902</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 25 Jul 2015 00:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template on Sat, 25 Jul 2015 04:55:33 GMT]]></title><description><![CDATA[<p>Mit C++17 Fold Expressions kann man vieles noch deutlich eleganter gestalten.<br />
Sich die jetzt schon anzuschauen, mit der Absicht sie zu verwenden, wäre allerdings verfrüht.</p>
<blockquote>
<p>nicht auf alle parameter in der selben funktion zugreifen koennen muesste</p>
</blockquote>
<p>Klingt nach einem Denkfehler für mich. no offense ofc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2460914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2460914</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sat, 25 Jul 2015 04:55:33 GMT</pubDate></item></channel></rss>