<?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[Probleme bei Var Args: sinnlose Werte bei Übergabe]]></title><description><![CDATA[<p>Hi.<br />
Ich habe gerade große Probleme mit den Var Args <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /><br />
Ich hoffe, dass aus dem Codesnippet den ich gepostet habe genug ersichtlich wird, um mir zu helfen - ich komme einfach nicht weiter, ich habe schon alles mögliche ausprobiert...</p>
<pre><code class="language-cpp">PYFUNC(ConCommand, hook)
{
	char szName[32] = { '\0' };
	PyObject *pyCallback = NULL;

	Msg(&quot;String Adress: %x\n&quot;, (unsigned long)szName); // Adresse valid (12b9e0)

	if (!pPython-&gt;getArgs(pyArgs/*durch Makro PYFUNC erstellt*/, 2, 0, 3/*nächstes Argument: String*/, szName, 9/*nächstes Argument: Callback*/, pyCallback))
	{
		return (PyObject*)NULL;
	}

	//...
}

//CPython *pPython = new CPython;

bool CPython::getArgs(PyObject *pyArgs, int iNeeded, int iOptional, ...)
{
	int iCount = (iNeeded + iOptional) * 2;
	char szParse[21] = { '\0' };

	for (int i = 0; i &lt; iNeeded; i++)
	{
		strcat(szParse, &quot;O&quot;); // erst alle benötigten Argumente
	}

	strcat(szParse, &quot;|&quot;); // Trenner zum anzeigen, dass Argumente ab hier optional sind

	for (int i = 0; i &lt; iOptional; i++)
	{
		strcat(szParse, &quot;O&quot;); // restliche Argumente
	}

	char szError[64] = { '\0' };
	PyObject *pyArgList[20];

	// an Pythoninstanz abgeben zum auswerten
	if (!PyArg_ParseTuple(pyArgs, szParse, &amp;pyArgList[0], &amp;pyArgList[1], &amp;pyArgList[2], &amp;pyArgList[3], &amp;pyArgList[4], &amp;pyArgList[5], &amp;pyArgList[6], &amp;pyArgList[7], &amp;pyArgList[8], &amp;pyArgList[9], &amp;pyArgList[10], &amp;pyArgList[11], &amp;pyArgList[12], &amp;pyArgList[13], &amp;pyArgList[14], &amp;pyArgList[15], &amp;pyArgList[16], &amp;pyArgList[17], &amp;pyArgList[18], &amp;pyArgList[19]))
	{
		PyErr_SetString(PyExc_TypeError, pTools-&gt;format(&quot;failed to parse all arguments (%i required, %i optional)&quot;, szError, iNeeded, iOptional));
		return false;
	}

	int Next = 0;

	va_list vaParameters;
	va_start(vaParameters, iCount);

	Msg(&quot;Loop: Start\n&quot;);

	for (int i = 0, k = 0; i &lt; iCount; i++)
	{
		Msg(&quot;Loop: %i &quot;, i);

		if (i % 2 == 0)
		{
			Msg(&quot;- Next: &quot;);

			Next = va_arg(vaParameters, int);
			Msg(&quot;%i\n&quot;, Next); // hier kommt völliger Nonsense, irgendwelche Zahlen über 1 Million
			// funktioniert ebenso wenig: Next = *va_arg(vaParameters, int*);
		}
		else
		{
			PyObject *pyArg = pyArgList[k++];

			//...
			else if (Next == 3)
			{
				char *pszString = va_arg(vaParameters, char*);

				//Msg(&quot;Debug: %s\n&quot;, x); &lt;- crasht
				Msg(&quot; - Parse String: %x\n&quot;, (unsigned long)x); // Adresse führt irgendwo ins nirvana, stimmt jedenfalls NICHT

				//...
			}
			//...
			else if (Next == 9)
			{
				PyObject *pyValue = va_arg(vaParameters, PyObject*);

				Msg(&quot; - Parse Callback: %x\n&quot;, (unsigned long)pyValue); // ebenfalls völliger Unsinn

				//...
			}
		}

		// ...
	}

	va_end(vaParameters);

	return true;
}
</code></pre>
<p>Die Ausgabe der Debugnachrichten sieht so aus:</p>
<pre><code class="language-cpp">String Adress: 12b9e0
Loop: Start
Loop: 0 - Next: 279340096 // sollte 3 sein
Loop: 1 - Parse String: 10a98c40 (sollte 12b9e0 sein)
Loop: 3 - Next: 279427952 // sollte 9 sein
Loop: 4 - Parse Callback: 10c83880 (sollte jedenfalls was anderes sein)
</code></pre>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267359/probleme-bei-var-args-sinnlose-werte-bei-übergabe</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 13:32:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267359.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 May 2010 11:03:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 11:03:40 GMT]]></title><description><![CDATA[<p>Hi.<br />
Ich habe gerade große Probleme mit den Var Args <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /><br />
Ich hoffe, dass aus dem Codesnippet den ich gepostet habe genug ersichtlich wird, um mir zu helfen - ich komme einfach nicht weiter, ich habe schon alles mögliche ausprobiert...</p>
<pre><code class="language-cpp">PYFUNC(ConCommand, hook)
{
	char szName[32] = { '\0' };
	PyObject *pyCallback = NULL;

	Msg(&quot;String Adress: %x\n&quot;, (unsigned long)szName); // Adresse valid (12b9e0)

	if (!pPython-&gt;getArgs(pyArgs/*durch Makro PYFUNC erstellt*/, 2, 0, 3/*nächstes Argument: String*/, szName, 9/*nächstes Argument: Callback*/, pyCallback))
	{
		return (PyObject*)NULL;
	}

	//...
}

//CPython *pPython = new CPython;

bool CPython::getArgs(PyObject *pyArgs, int iNeeded, int iOptional, ...)
{
	int iCount = (iNeeded + iOptional) * 2;
	char szParse[21] = { '\0' };

	for (int i = 0; i &lt; iNeeded; i++)
	{
		strcat(szParse, &quot;O&quot;); // erst alle benötigten Argumente
	}

	strcat(szParse, &quot;|&quot;); // Trenner zum anzeigen, dass Argumente ab hier optional sind

	for (int i = 0; i &lt; iOptional; i++)
	{
		strcat(szParse, &quot;O&quot;); // restliche Argumente
	}

	char szError[64] = { '\0' };
	PyObject *pyArgList[20];

	// an Pythoninstanz abgeben zum auswerten
	if (!PyArg_ParseTuple(pyArgs, szParse, &amp;pyArgList[0], &amp;pyArgList[1], &amp;pyArgList[2], &amp;pyArgList[3], &amp;pyArgList[4], &amp;pyArgList[5], &amp;pyArgList[6], &amp;pyArgList[7], &amp;pyArgList[8], &amp;pyArgList[9], &amp;pyArgList[10], &amp;pyArgList[11], &amp;pyArgList[12], &amp;pyArgList[13], &amp;pyArgList[14], &amp;pyArgList[15], &amp;pyArgList[16], &amp;pyArgList[17], &amp;pyArgList[18], &amp;pyArgList[19]))
	{
		PyErr_SetString(PyExc_TypeError, pTools-&gt;format(&quot;failed to parse all arguments (%i required, %i optional)&quot;, szError, iNeeded, iOptional));
		return false;
	}

	int Next = 0;

	va_list vaParameters;
	va_start(vaParameters, iCount);

	Msg(&quot;Loop: Start\n&quot;);

	for (int i = 0, k = 0; i &lt; iCount; i++)
	{
		Msg(&quot;Loop: %i &quot;, i);

		if (i % 2 == 0)
		{
			Msg(&quot;- Next: &quot;);

			Next = va_arg(vaParameters, int);
			Msg(&quot;%i\n&quot;, Next); // hier kommt völliger Nonsense, irgendwelche Zahlen über 1 Million
			// funktioniert ebenso wenig: Next = *va_arg(vaParameters, int*);
		}
		else
		{
			PyObject *pyArg = pyArgList[k++];

			//...
			else if (Next == 3)
			{
				char *pszString = va_arg(vaParameters, char*);

				//Msg(&quot;Debug: %s\n&quot;, x); &lt;- crasht
				Msg(&quot; - Parse String: %x\n&quot;, (unsigned long)x); // Adresse führt irgendwo ins nirvana, stimmt jedenfalls NICHT

				//...
			}
			//...
			else if (Next == 9)
			{
				PyObject *pyValue = va_arg(vaParameters, PyObject*);

				Msg(&quot; - Parse Callback: %x\n&quot;, (unsigned long)pyValue); // ebenfalls völliger Unsinn

				//...
			}
		}

		// ...
	}

	va_end(vaParameters);

	return true;
}
</code></pre>
<p>Die Ausgabe der Debugnachrichten sieht so aus:</p>
<pre><code class="language-cpp">String Adress: 12b9e0
Loop: Start
Loop: 0 - Next: 279340096 // sollte 3 sein
Loop: 1 - Parse String: 10a98c40 (sollte 12b9e0 sein)
Loop: 3 - Next: 279427952 // sollte 9 sein
Loop: 4 - Parse Callback: 10c83880 (sollte jedenfalls was anderes sein)
</code></pre>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901408</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 11:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 11:15:06 GMT]]></title><description><![CDATA[<p>Hmm... selbst Schuld?</p>
<p>Ich meine, warum nutzt Du auch &quot;var args&quot; und warum nutzt Du char-Arrays mit den C-Stringfunktionen? Das ist alles inhärent fehleranfällig.</p>
<blockquote>
<pre><code class="language-cpp">bool CPython::getArgs(PyObject *pyArgs, int iNeeded, int  iOptional, ...)
{
    int iCount = (iNeeded + iOptional) * 2;
    [...]
    va_list vaParameters;
    va_start(vaParameters, iCount);
</code></pre>
</blockquote>
<p>Das kann ja schonmal nicht stimmen. Müsste doch eigentlich</p>
<pre><code class="language-cpp">va_start(vaParameters, iOptional);
</code></pre>
<p>heißen, nicht?</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901416</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 23 May 2010 11:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 11:46:10 GMT]]></title><description><![CDATA[<p>Wieso selbst Schuld? Es gibt keine (mir bekannte) Möglichkeit, dass anders komfortabel und ohne Makros zu lösen.<br />
Und das hat mit C-Strings auch nichts zu tun, denn nicht einmal die Integer werden ordentlich übergeben. Sonst funktioniert das aber immer problemlos (z.B. vsprintf und Konsorten).</p>
<p>Aber das iCount ist schon richtig. Denn es gibt ja für jeden erwarteten Parameter der Python Funktion zwei Werte, die ich annehme. Einmal der Typ des erwarteten Parameters (z.B. 3 aka String) und dann die Adresse zur Variable. Also muss man die Anzahl der Parameter mal 2 nehmen. iNeeded gibt nur an, dass z.B. zwei Parameter benötigt, und z.B. 0 weitere Optional sind (iOptional).</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901438</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 11:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 11:49:43 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Wieso selbst Schuld? Es gibt keine (mir bekannte) Möglichkeit, dass anders komfortabel und ohne Makros zu lösen.</p>
</blockquote>
<p>Arrays, Vectoren, Listen, Maps...</p>
<p><em>Money for nothing chicks for free</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901444</guid><dc:creator><![CDATA[drommeldrommeldrommel]]></dc:creator><pubDate>Sun, 23 May 2010 11:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 11:53:13 GMT]]></title><description><![CDATA[<p>Die erwarteten Parameter sind wie gesagt <code>variabel</code> und ich kann deshalb nicht einfach einen Vektor nehmen. Und da sie zur Compilezeit feststehen ist das auch gar nicht nötig.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901450</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 11:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:03:49 GMT]]></title><description><![CDATA[<p>VarArgs in C++ sind trotzdem gefährlich und extrem fehleranfällig. Kannst du dir nicht eine kleine Struktur basteln, die sich eine Typ-ID speichert und dann die eigentlichen Daten mit irgendetwas immer noch genug Unsicherem referenziert ( <code>union</code> oder <code>void*</code> )? Man könnte natürlich auch mit dynamischer Polymorphie und Type Erasure eine elegante Lösung finden. Beispielsweise indem man <em>Boost.Variant</em> benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901458</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 23 May 2010 12:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:09:29 GMT]]></title><description><![CDATA[<p>Hi.<br />
Ich kann nicht verstehen was daran gefährlich ist, solange man es richtig anwendet. Und es hat bei mir bisher immer problemlos funktioniert, sowohl unter Linux als auch unter Windows. Aber irgendwo muss ja hier ein Fehler in meinem Code sein, den ich nicht lokalisieren kann.<br />
VA sind eben viel komfortabler als irgendwelche structs zu erstellen oder Boost zu verwenden. Mir geht es hier eher um &quot;usability&quot; als um eleganten Code.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901461</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 12:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:10:12 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Die erwarteten Parameter sind wie gesagt <code>variabel</code> und ich kann deshalb nicht einfach einen Vektor nehmen. Und da sie zur Compilezeit feststehen ist das auch gar nicht nötig.</p>
</blockquote>
<p>Templates, Operatorüberladung, Funktoren, Referenzenrückgabe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901462</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 23 May 2010 12:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:12:31 GMT]]></title><description><![CDATA[<p>Dann müsste ich ja 10 Templateklassen erstellen, die jeweils 1, 2, 3, 4, 5, 6, 7, 8, 9 oder 10 Parameter annehmen kann. Sowas nenne ich weder elegant noch komfortabel.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901465</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 12:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:19:09 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Aber das iCount ist schon richtig.</p>
</blockquote>
<p>nein, siehe va_start(). Da musst du das letzte Argument vor den &quot;...&quot; übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901468</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Sun, 23 May 2010 12:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:19:22 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Ich kann nicht verstehen was daran gefährlich ist, solange man es richtig anwendet.</p>
</blockquote>
<p>Haargenau! Wieso machst du es dann nicht?</p>
<p>theliquidwave schrieb:</p>
<blockquote>
<p>Aber das iCount ist schon richtig. Denn es gibt ja für jeden erwarteten Parameter der Python Funktion zwei Werte, die ich annehme. Einmal der Typ des erwarteten Parameters (z.B. 3 aka String) und dann die Adresse zur Variable. Also muss man die Anzahl der Parameter mal 2 nehmen. iNeeded gibt nur an, dass z.B. zwei Parameter benötigt, und z.B. 0 weitere Optional sind (iOptional).</p>
</blockquote>
<p>Lies mal die Dokumentation, was als zweites Argument von va_start benötigt wird:<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdarg/va_start/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstdarg/va_start/</a></p>
<p>Das ist nur einer der vielen Gründe, wieso dies eine schlechte Lösung ist. Du hast es grad selber bewiesen <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>theliquidwave schrieb:</p>
<blockquote>
<p>Dann müsste ich ja 10 Templateklassen erstellen, die jeweils 1, 2, 3, 4, 5, 6, 7, 8, 9 oder 10 Parameter annehmen kann. Sowas nenne ich weder elegant noch komfortabel.</p>
</blockquote>
<p>Mit Makros aber durchaus machbar. Und zukünftig dann durch variadic Templates ersetzbar.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901470</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 23 May 2010 12:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 12:22:12 GMT]]></title><description><![CDATA[<p>OMG!<br />
Diese Seite habe ich mir mindestens 3x durchgelesen, aber das habe ich immer falsch interpretiert -.-</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901473</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 23 May 2010 12:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 21:14:30 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Und zukünftig dann durch variadic Templates ersetzbar.</p>
</blockquote>
<p>Wenn dein Compiler Variadic Templates nicht unterstützt könntest du zb. auf gcc umsteigen, dieser Compiliert folgenden code einwandfrei:</p>
<pre><code class="language-cpp">template&lt;class Type&gt;
void Print( Type Arg )
{
    std::cout&lt;&lt; Arg &lt;&lt;&quot;\n&quot; ;
}

template&lt;class Type, class...Types&gt;
typename
std::enable_if&lt; sizeof...(Types)&lt;10 , void &gt; // Maximal 10 args
::type Print( Type Arg , Types...Args )
{
    std::cout&lt;&lt; Arg &lt;&lt;&quot;\n&quot; ;
    Print(Args...); // Rekrusion
}

int main()
{
    Print(&quot;eins&quot;,2,3,4,5);
}
</code></pre>
<p>Gruss<br />
Speed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901652</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sun, 23 May 2010 21:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 21:29:26 GMT]]></title><description><![CDATA[<p>Speed schrieb:</p>
<blockquote>
<p>Wenn dein Compiler Variadic Templates nicht unterstützt könntest du zb. auf gcc umsteigen, ...</p>
</blockquote>
<p>Und so ein Umstieg ist einfach und problemlos möglich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Wenn wir es zudem ganz genau nehmen, sind variadic Templates noch gar nicht als Standard definiert <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>Also bevor man vorschnell den Kompiler wechselt und die ganze Entwicklungsumgebung womöglich gleich mit, sollte man sich überlegen, ob ein bis zwei Jahre zusätzliches Warten, vielleicht nicht besser wäre.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901656</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 23 May 2010 21:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 22:10:16 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Speed schrieb:</p>
<blockquote>
<p>Wenn dein Compiler Variadic Templates nicht unterstützt könntest du zb. auf gcc umsteigen, ...</p>
</blockquote>
<p>Und so ein Umstieg ist einfach und problemlos möglich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Wenn wir es zudem ganz genau nehmen, sind variadic Templates noch gar nicht als Standard definiert <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>Also bevor man vorschnell den Kompiler wechselt und die ganze Entwicklungsumgebung womöglich gleich mit, sollte man sich überlegen, ob ein bis zwei Jahre zusätzliches Warten, vielleicht nicht besser wäre.</p>
<p>Grüssli</p>
</blockquote>
<p>Sind Variadic Templates nicht im C++09-Standart eingeführt worden?<br />
Glaubst du das Compilerhersteller-die es Bereits eingeführt haben das anschließend wieder, raus nehmen werden?<br />
Naja wie auch immer...</p>
<p>Meistens ist es dem Kunden egal, Wie Man etwas macht - er will Ergebnisse sehen.<br />
Und mit Konstrukten wie diesen kann man m.E. viel schneller und effizienter Programmieren.<br />
Wenn der Trendsteller nicht in all zu großen Gruppen und das Projekt nicht weit fortgeschritten(Leider ist der meiste Code nicht von Compiler zu Compiler portabel, besonders wenns sich um GUI-IDEs handelt) ist, meine ich, dass sich ein Umstieg Lohnt. Deswegen versuche ich stets, solche &quot;Compiler-features&quot; auszunutzen...</p>
<p>Gruss<br />
Speed</p>
<p>Edit: wieso wird Standart Zensiert?<br />
Edit2 : wieso macht er es lowwercase?<br />
Edit3 : <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a> : wie hast du es hingekriegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901660</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sun, 23 May 2010 22:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 22:20:59 GMT]]></title><description><![CDATA[<p>Standar<strong>d</strong></p>
<p>Einfach richtig schreiben, dann wirst du auch nicht zensiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901664</guid><dc:creator><![CDATA[Standarder]]></dc:creator><pubDate>Sun, 23 May 2010 22:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Sun, 23 May 2010 22:35:12 GMT]]></title><description><![CDATA[<p>Speed schrieb:</p>
<blockquote>
<p>Sind Variadic Templates nicht im C++09-stan**** eingeführt worden?</p>
</blockquote>
<p>Witzbold, C++0x ist noch nicht verabschiedet. Wenn alles gut geht, dann können wir den Standard Ende 2011 erwarten. Ja, variadic Templates werden mit sehr hoher Wahrscheinlichkeit drin sein, wüsste jedenfalls nicht, wieso man sie aus dem aktuellen Draft rausnehmen sollte, aber man weiss ja nie <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>Spee schrieb:</p>
<blockquote>
<p>Wenn der Trendsteller nicht in all zu großen Gruppen und das Projekt nicht weit fortgeschritten(Leider ist der meiste Code nicht von Compiler zu Compiler portabel, besonders wenns sich um GUI-IDEs handelt) ist, meine ich, dass sich ein Umstieg Lohnt. Deswegen versuche ich stets, solche &quot;Compiler-features&quot; auszunutzen...</p>
</blockquote>
<p>1. Trendsteller? (wahrscheinlich Thread-Ersteller gemeint?) <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 />
2. Man kann Code so programmieren, dass er vollkommen protabel ist. Da sind auch GUIs gar kein Problem, man muss sich nur entsprechender Frameworks bedienen.<br />
3. &quot;Compiler-Features&quot; sollte man mit Vorsicht geniessen. Sie machen den Code eben unportabel. Zum Teil sogar zwischen Kompilerversionen des gleichen Herstellers. Der Standard dagegen ändert sich nur sehr selten und bleibt meistens rückwärtskompatibel.<br />
4. Du vergisst irgendwie, dass man beim Wechsel des Kompilers oft auch noch andere Dinge wechseln muss. Zum Beispiel Debugger, Linker, Build-Tools, IDE usw.<br />
Auch sollte man nicht unterschätzen, was man an Know-How verliert, wenn man diese Umstellung durchführt.</p>
<p>Also nur wegen variadic Templates den Kompiler zu wechseln, halte ich für grob verkehrt. In einem kleinen privaten Projekt, mag dies vielleicht noch möglich sein, in einer Firma aber definitiv ein absolutes No-go. Ich würde es aber nicht mal einem privaten empfehlen, nur wegen variadic Templates einen anderen Kompiler zu nehmen, zumal es sowieso noch nicht Standard ist.</p>
<p>Speed schrieb:</p>
<blockquote>
<p>Edit: wieso wird stan**** Zensiert?<br />
Edit2 : wieso macht er es lowwercase?<br />
Edit3 : <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a> : wie hast du es hingekriegt?</p>
</blockquote>
<p>Schau mal im Duden nach, wie man Standar<strong>d</strong> schreibt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901668</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 23 May 2010 22:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 01:06:22 GMT]]></title><description><![CDATA[<p>ich würde jetzt zwar auch nicht den compiler wechseln weil einem hier gesagt wird das va_arg() &quot;böse&quot; ist, aber...</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Auch sollte man nicht unterschätzen, was man an Know-How verliert, wenn man diese Umstellung durchführt.</p>
</blockquote>
<p>das sollte wohl nicht das problem sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901684</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Mon, 24 May 2010 01:06:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 05:06:17 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Die erwarteten Parameter sind wie gesagt <code>variabel</code> und ich kann deshalb nicht einfach einen Vektor nehmen. Und da sie zur Compilezeit feststehen ist das auch gar nicht nötig.</p>
</blockquote>
<p>Irgendwie sieht der Code so aus, als ob immer ein PyObject draus wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901696</guid><dc:creator><![CDATA[drommeldrommeldrommel]]></dc:creator><pubDate>Mon, 24 May 2010 05:06:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 08:38:42 GMT]]></title><description><![CDATA[<p>DrGreenthumb schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Auch sollte man nicht unterschätzen, was man an Know-How verliert, wenn man diese Umstellung durchführt.</p>
</blockquote>
<p>das sollte wohl nicht das problem sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Dann bist du der Meinung, dass wenn jemand sehr gut mit dem MSVC Debugger umgehen kann, er sofort auch ohne Probleme mit dem GDB umgehen kann?<br />
Oder wenn er mit VS entwickelt, er sofort auch die Code::Blocks oder KDevelop IDE in und auswendig kennt?<br />
usw.</p>
<p>Mit einem Werkzeug sammelt man Erfahrung, welche man nicht einfach so auf ein anderes Werkzeug übertragen kann. Die Einarbeitung in das andere Werkzeug kostet wieder Zeit, Nerven und Geld. Womöglich hat man dann sogar Werkzeuge zur Hand, welche für die eigentliche Aufgabe völlig ungeeignet sind.<br />
Und das alles nur, weil man variadic Templates wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901733</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 24 May 2010 08:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 11:45:08 GMT]]></title><description><![CDATA[<p>So, ich wollte auch mal meinen Senf dazugeben, wie man Funktionen mit beliebig vielen Parametern unbekannten Typs noch behandeln kann. Und zwar typensicher. Die Standardbibliothek macht es schließlich vor:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; // Bloß zur Demonstration
#include &lt;string&gt;   // Bloß zur Demonstration

#include &lt;list&gt;
#include &lt;boost/any.hpp&gt;

class foo
{
private:
  std::list&lt;boost::any&gt; args;
  template&lt;typename T&gt; friend foo&amp; operator&lt;&lt;(foo &amp; lhs, T rhs);
public:
  static void execute(){};
}; 

template&lt;typename T&gt; foo&amp; operator&lt;&lt;(foo &amp; lhs, T rhs)
{
  lhs.args.push_back(rhs);
  return lhs;
}

template&lt;&gt; foo&amp; operator&lt;&lt;(foo &amp; lhs, void (*rhs)())
{
  if (rhs==foo::execute)
    { 
      std::cout&lt;&lt;&quot;Funktion aufgerufen mit &quot; &lt;&lt; lhs.args.size() &lt;&lt; &quot; Parametern.\n&quot;;
      unsigned counter=0;
      for(std::list&lt;boost::any&gt;::iterator i = lhs.args.begin();i!=lhs.args.end();++i )
        {
          std::cout&lt;&lt;++counter&lt;&lt;&quot;. Parameter hat typeid &quot;&lt;&lt;i-&gt;type().name()&lt;&lt;&quot;.\n&quot;;
          // Hierhin kann Code um auf den Parametertypen zu reagieren
        }
      lhs.args.clear();
    }
  return lhs;
}

foo seppj_out;

int main()
{
  seppj_out&lt;&lt;1&lt;&lt;2&lt;&lt;std::string(&quot;Test&quot;)&lt;&lt;foo::execute;
  seppj_out&lt;&lt;1.&lt;&lt;2.&lt;&lt;foo::execute;
}
</code></pre>
<p>Man fühle sich frei, nach Belieben Templatespezialisierungen, Überladungen oder Fallunterscheidungen hinzuzufügen.</p>
<p>Ausgabe bei GCC(genaue Ausgabe von typeid ist nicht standardisiert):</p>
<pre><code>Funktion aufgerufen mit 3 Parametern.
1. Parameter hat typeid i.
2. Parameter hat typeid i.
3. Parameter hat typeid Ss.
Funktion aufgerufen mit 2 Parametern.
1. Parameter hat typeid d.
2. Parameter hat typeid d.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1901810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901810</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 May 2010 11:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 11:49:23 GMT]]></title><description><![CDATA[<p>Was hat boost::any mit der Standardbibliothek zu tun? Und warum machst du so ein komisches Zeugs drum rum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901815</guid><dc:creator><![CDATA[ayayayaaa]]></dc:creator><pubDate>Mon, 24 May 2010 11:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 11:50:49 GMT]]></title><description><![CDATA[<p>Wenn man sich vorher auf eine Anzahl Typen festlegt, die angenommen werden können, kann man statt <em>Boost.Any</em> auch <em>Boost.Variant</em> benutzen und dann geht die Abfrage noch etwas eleganter mittels Visitors.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901818</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 24 May 2010 11:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 12:38:02 GMT]]></title><description><![CDATA[<p>ayayayaaa schrieb:</p>
<blockquote>
<p>Was hat boost::any mit der Standardbibliothek zu tun? Und warum machst du so ein komisches Zeugs drum rum?</p>
</blockquote>
<p>boost::any hat gar nichts damit zu tun, ich wollte bloß nicht so viel tippen für ein einfaches Beispiel. Das &quot;komische Zeugs&quot; ist der Kern der Idee: Erst füttert man das Funktionsobjekt mit den Parametern, dann führt man die Funktion aus.</p>
<p>Da man in der Praxis wohl kaum mit beliebigen Parameterarten arbeiten wird, würde man in einer echten Umsetzung eher eine Überladung anstatt eines Templates benutzen und einen spezialisierten Container für jeden Argumententyp anstatt eines allgemeinen Containers wie boost::any.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901854</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 May 2010 12:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 14:11:26 GMT]]></title><description><![CDATA[<p>Der else-Zweig in der Spezialisierung fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901906</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 May 2010 14:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Var Args: sinnlose Werte bei Übergabe on Mon, 24 May 2010 14:34:59 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>ayayayaaa schrieb:</p>
<blockquote>
<p>Was hat boost::any mit der Standardbibliothek zu tun? Und warum machst du so ein komisches Zeugs drum rum?</p>
</blockquote>
<p>boost::any hat gar nichts damit zu tun, ich wollte bloß nicht so viel tippen für ein einfaches Beispiel. Das &quot;komische Zeugs&quot; ist der Kern der Idee: Erst füttert man das Funktionsobjekt mit den Parametern, dann führt man die Funktion aus.</p>
</blockquote>
<p>der wollte doch nur beliebige argumente übergeben, da hätte eine std::list<a href="boost::any" rel="nofollow">boost::any</a> args gereicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1901920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1901920</guid><dc:creator><![CDATA[ayayayaaa]]></dc:creator><pubDate>Mon, 24 May 2010 14:34:59 GMT</pubDate></item></channel></rss>