<?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[Parameterkette in Funktionssignatur (...)]]></title><description><![CDATA[<p>Hi,</p>
<p>man sieht ab und an mal in Funktionen mit der Definition in der Art <strong>void foo(int i, ...);</strong> - zum Beispiel bei einigen <strong>printf</strong> Derivaten. Damit werden irgendwie die Parameter verlängert. Wie funktioniert dies und sollte man das auch selber (wo es Sinn macht) verwenden oder hat das Nachteile?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165489/parameterkette-in-funktionssignatur</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 19:28:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165489.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Nov 2006 13:39:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 13:39:59 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>man sieht ab und an mal in Funktionen mit der Definition in der Art <strong>void foo(int i, ...);</strong> - zum Beispiel bei einigen <strong>printf</strong> Derivaten. Damit werden irgendwie die Parameter verlängert. Wie funktioniert dies und sollte man das auch selber (wo es Sinn macht) verwenden oder hat das Nachteile?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177773</guid><dc:creator><![CDATA[__et_]]></dc:creator><pubDate>Mon, 20 Nov 2006 13:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 13:55:43 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Ellipse_%28Begriffskl%C3%A4rung%29" rel="nofollow">http://de.wikipedia.org/wiki/Ellipse_(Begriffsklärung)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177786</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 20 Nov 2006 13:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 18:11:02 GMT]]></title><description><![CDATA[<p>Ist nicht zu empfehlen solange man es nicht unbedingt braucht, da nicht typsicher etc.<br />
Nennen tut man das &quot;varargs&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177989</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 20 Nov 2006 18:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 18:18:24 GMT]]></title><description><![CDATA[<p>Es ist nicht nur nicht typsicher, wenn es mit C++-Objekten gefüttert wird erzeugt es auch noch undefiniertes Verhalten.<br />
Es gibt aber einen sehr vielversprechenden Ansatz für eine Spracherweiterung deren Namen mir gerade nicht einfällt, die das ganze dann &quot;ordentlich&quot; über Templates erledigen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178000</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 20 Nov 2006 18:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 19:46:04 GMT]]></title><description><![CDATA[<p>Erwähnenswert ist noch, dass die Ellipse manchmal beim Überladen ganz praktisch ist, weil sie am schlechtesten auf einen Parametertyp passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178038</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 20 Nov 2006 19:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 19:48:02 GMT]]></title><description><![CDATA[<p>Geht mal in google nach &quot;variadic templates&quot; suchen!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178039</guid><dc:creator><![CDATA[lemonhead]]></dc:creator><pubDate>Mon, 20 Nov 2006 19:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 19:49:42 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Es ist nicht nur nicht typsicher, wenn es mit C++-Objekten gefüttert wird erzeugt es auch noch undefiniertes Verhalten.<br />
Es gibt aber einen sehr vielversprechenden Ansatz für eine Spracherweiterung deren Namen mir gerade nicht einfällt, die das ganze dann &quot;ordentlich&quot; über Templates erledigen kann.</p>
</blockquote>
<p>variadic templates schimpft sich des sichere</p>
<p><a href="http://www.osl.iu.edu/~dgregor/cpp/variadic-templates.html" rel="nofollow">http://www.osl.iu.edu/~dgregor/cpp/variadic-templates.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178041</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Mon, 20 Nov 2006 19:49:42 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Mon, 20 Nov 2006 19:59:51 GMT]]></title><description><![CDATA[<p>ich benutz das aber erst wenn das offiziell ist. Sieht aber schonmal cool aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178052</guid><dc:creator><![CDATA[lemonhead]]></dc:creator><pubDate>Mon, 20 Nov 2006 19:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Tue, 21 Nov 2006 00:33:44 GMT]]></title><description><![CDATA[<p>r0nny schrieb:</p>
<blockquote>
<p>variadic templates schimpft sich des sichere</p>
<p><a href="http://www.osl.iu.edu/~dgregor/cpp/variadic-templates.html" rel="nofollow">http://www.osl.iu.edu/~dgregor/cpp/variadic-templates.html</a></p>
</blockquote>
<p>lemonhead schrieb:</p>
<blockquote>
<p>ich benutz das aber erst wenn das offiziell ist. Sieht aber schonmal cool aus.</p>
</blockquote>
<p>EDIT: sieht wie ich finde grässlich aus, aber jedem das Seine <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="😃"
    /></p>
<p>Bis dahin könnte man doch ein einfaches Template verwenden, und die varargs als z.B. boost::tuple übergeben. Ist zwar nicht gut dokumentiert, aber Boost.Tuple hat ein &quot;head&quot; und ein &quot;tail&quot; member, wobei &quot;head&quot; das erste Element ist, und &quot;tail&quot; das letzte (bzw. eine &quot;get_head&quot; und eine &quot;get_tail&quot; Funktion). Und mit einer spezialisierung auf &quot;boost::tuple&lt;&gt;&quot; kann man die rekursive template instanzierung abbrechen.</p>
<p>Sollte relativ einfach machbar sein... und funktioniert mit dem heutigen C++ Standard und heute verfügbaren Compilern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178124</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 21 Nov 2006 00:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Tue, 21 Nov 2006 18:43:22 GMT]]></title><description><![CDATA[<p>Das macht aber nicht das, wofür man es braucht (nämlich variable Anzahl von Parametern).<br />
Btw., tail ist nicht das letzte Element sondern der Rest des Tupels.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178732</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 21 Nov 2006 18:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Tue, 21 Nov 2006 19:23:30 GMT]]></title><description><![CDATA[<p>Benutz den Preprocessor um dir automatisch überladene Funktionen für bis zu einer geweissen Anzahl Parameter zu generiren. Ist das beste was du mit dem jetztigen Standard hinkriegst.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &lt;boost/preprocessor.hpp&gt;
#include &lt;iostream&gt;

#define OP_SHIFT(z, n, arg)\
  &lt;&lt; arg ## n
#define MY_PRINT(z, n, data)\
  template&lt;BOOST_PP_ENUM_PARAMS(n ,class T)&gt;\
  void my_print(BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &amp;t))\
  {\
    std::cout BOOST_PP_REPEAT_ ## z(n, OP_SHIFT, t) &lt;&lt;std::endl;\
  }

BOOST_PP_REPEAT_FROM_TO(1, 10, MY_PRINT, nil)
#undef OP_SHIFT
#undef MY_PRINT

int main(){
  my_print(1, &quot; + &quot;, 3, '=', 1+3);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1178753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178753</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Tue, 21 Nov 2006 19:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Tue, 21 Nov 2006 20:56:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@.filmor</a>:<br />
ja, sorry, natürlich ist tail der Rest, alles bis aufs erste Element halt.<br />
Und natürlich ist es ein syntaktischer Unterschied, aber ich kann immernoch schreiben</p>
<pre><code class="language-cpp">foo(&quot;%s %s %s&quot;, boost::make_tuple(&quot;sepp&quot;, &quot;hugo&quot;, &quot;franz&quot;));
foo(&quot;%s&quot;, boost::make_tuple(&quot;dings&quot;));
foo(&quot;zonk&quot;, boost::tuple&lt;&gt;());
</code></pre>
<p>Wenn die genaue Syntax zum Aufruf nicht vorgegeben ist, ist das ein möglicher ersatz. Wenn man natürlich darauf besteht dass foo selbst (und nicht make_tuple) eine variable Anzahl an Parametern frisst ist es kein Ersatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178808</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 21 Nov 2006 20:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterkette in Funktionssignatur (...) on Tue, 21 Nov 2006 22:12:41 GMT]]></title><description><![CDATA[<p>Du könntest es folgendermasen machen:</p>
<pre><code class="language-cpp">template&lt;class Tuple&gt;
void foo_impl(const Tuple&amp;){

}
MAKE_VAR_FUNC(foo)
</code></pre>
<p>MAKE_VAR_FUNC würde die nötigen Überladungen erzeugen und alle Parameter als Tuple an foo_impl weiterleiten. Man könnte auch noch ein zusätzlicher Makroparameter einbauen um normale Parameter zu erlauben.</p>
<p>Da MAKE_VAR_FUNC O(n) ist wo n die maximale Anzahl der Parameter ist wäre könnte man diesen Wert locker auf irgend einen hohen Wert setzen.</p>
<p>Würde doch in etwa das rauskommen was da versucht wurde als Sprachelement nachzubauen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178856</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Tue, 21 Nov 2006 22:12:41 GMT</pubDate></item></channel></rss>