<?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[Verschiedene Funktionszeiger in einem Array]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe zwei funktionszeiger:</p>
<pre><code class="language-cpp">typedef void(A::*func1)(const double&amp;);
typedef void(B::*func2)(bool);
</code></pre>
<p>Gibt es irgende eine Möglichkeit diese in einem Array zu speichern so dass:</p>
<pre><code class="language-cpp">array[0] = func1;
array[2] = func2;
</code></pre>
<p>Mit welchem Datentyp müsste das Array initialisiert werden?<br />
Ich habe hier langen Code vorliegen der sich für die beiden wiederholt und ich möchte diese beiden Teile in einer Schleife ausführen lassen, damit die redundaten Codezeilen wegfallen.</p>
<p>Ist dies ohne dirty Code möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270200/verschiedene-funktionszeiger-in-einem-array</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 12:51:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270200.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jul 2010 08:28:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 08:28:50 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe zwei funktionszeiger:</p>
<pre><code class="language-cpp">typedef void(A::*func1)(const double&amp;);
typedef void(B::*func2)(bool);
</code></pre>
<p>Gibt es irgende eine Möglichkeit diese in einem Array zu speichern so dass:</p>
<pre><code class="language-cpp">array[0] = func1;
array[2] = func2;
</code></pre>
<p>Mit welchem Datentyp müsste das Array initialisiert werden?<br />
Ich habe hier langen Code vorliegen der sich für die beiden wiederholt und ich möchte diese beiden Teile in einer Schleife ausführen lassen, damit die redundaten Codezeilen wegfallen.</p>
<p>Ist dies ohne dirty Code möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923122</guid><dc:creator><![CDATA[funktionszeiger]]></dc:creator><pubDate>Thu, 08 Jul 2010 08:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 08:34:56 GMT]]></title><description><![CDATA[<p>Natürlich sollte das array so lauten</p>
<pre><code class="language-cpp">array[0] = func1;
array[1] = func2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1923124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923124</guid><dc:creator><![CDATA[funktionszeiger]]></dc:creator><pubDate>Thu, 08 Jul 2010 08:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 08:40:34 GMT]]></title><description><![CDATA[<p>Das geht wohl nicht. Wie sieht denn der Code aus, der diese Funktionen dann aufrufen soll?</p>
<p>(Warum schreibt jemand eigentlich <code>const double&amp;</code> , aber ist dann nicht so konsequent <code>const bool&amp;</code> zu schreiben? Nicht, dass auch nur eins davon sinnvoll wäre imho.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923130</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Thu, 08 Jul 2010 08:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 08:45:26 GMT]]></title><description><![CDATA[<p>Scheint wenig Sinn zu machen. Wenn die beiden Funktionen unterschiedliche Parameter erwarten, wird der Aufruf ebenfalls anders aussehen und du brauchst so oder so eine Fallunterscheidung.<br />
Im ersten Durchlauf rufst du die eine Funktion auf, im nächsten die andere, ganz einfach.<br />
Oder vielleicht auch nicht, dann musst du aber Code zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923132</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Thu, 08 Jul 2010 08:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 08:57:59 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>Das geht wohl nicht. Wie sieht denn der Code aus, der diese Funktionen dann aufrufen soll?</p>
</blockquote>
<p>Ich habe attribute die ich abarbeiten möchte:</p>
<pre><code class="language-cpp">wxString attr1[] = {_(&quot;a&quot;),_(&quot;b&quot;),_(&quot;c&quot;)};
wxString attr2[] = {_(&quot;d&quot;),_(&quot;e&quot;),_(&quot;e&quot;)}; // zweites e=dummy wg. größe
</code></pre>
<p>Die dazugehörigen Funktionszeiger:</p>
<pre><code class="language-cpp">typedef void(A::*func1)(const double&amp;);
func1 set_func1[] = {&amp;A::a,&amp;A::b,&amp;A::c,};

typedef void(B::*func2)(bool);
func2 set_func2[] = {&amp;B::d,&amp;B::e,,&amp;B::e}; // zweites &amp;B::e=dummy wg. größe
</code></pre>
<p>Was ich vorhatte war ungefähr so:</p>
<pre><code class="language-cpp">attrib[0] = attr1;
attrib[1] = attr2;

func[0] = func1;
func[1] = func2;

for(i=0;i&lt;2;i++){
  for(j=0;j&lt;3;j++){
   val = node-&gt;GetPropVal(attrib[i][j]);
   // if !flag blabla
   (object.*func[i][j])(val);
}
</code></pre>
<p>Es wird wahrscheinlich nicht klappen weil ja object ja auch verschieden ist...<br />
da komme ich wohl nicht um ein template.</p>
<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>(Warum schreibt jemand eigentlich <code>const double&amp;</code> , aber ist dann nicht so konsequent <code>const bool&amp;</code> zu schreiben? Nicht, dass auch nur eins davon sinnvoll wäre imho.)</p>
</blockquote>
<p>gibt es auch bei double keinen Geschwindigkeitszuwachs wenn man es als Referenz übergibt? Wo kann man eine Grenze ziehen? Am besten in size_t einheiten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923142</guid><dc:creator><![CDATA[funktionszeiger]]></dc:creator><pubDate>Thu, 08 Jul 2010 08:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 09:20:59 GMT]]></title><description><![CDATA[<p>Irgendwo muss ja entschieden werden, welche Funktion augerufen werden soll. Welchen Typ soll denn <code>val</code> in deinem Beispiel haben, und woher weiß <code>GetPropVal</code> , welchen Typ es liefern soll?</p>
<blockquote>
<p>gibt es auch bei double keinen Geschwindigkeitszuwachs wenn man es als Referenz übergibt? Wo kann man eine Grenze ziehen? Am besten in size_t einheiten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ich persönlich würde die Grenze bei zusammengesetzten Objekten ziehen. Fundamentale Typen immer als Wert übergeben, zusammengesetzte gegebenenfalls als Referenz, falls eine Kopie für den konkreten Fall nicht sinnvoller ist.</p>
<p>Wenn dein Programm mit mehreren Threads arbeitet, sind solche unnützen Referenzen doch eher kontraproduktiv und eine schwer zu findende Fehlerquelle. Performancegewinne halte ich für unwahrscheinlich, sie sind sogar eher ein potenzieller Bremsklotz, wenn man zum Beispiel Locks länger halten muss als wenn man den Wert einfach kopiert hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923149</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Thu, 08 Jul 2010 09:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 16:04:12 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Habe es jetzt mit Templates gelöst. Danke für deine Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923390</guid><dc:creator><![CDATA[funktionszeiger]]></dc:creator><pubDate>Thu, 08 Jul 2010 16:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 16:14:46 GMT]]></title><description><![CDATA[<p>Für so etwas würde ich dir sehr <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/function.html" rel="nofollow">boost::function</a> ans Herz legen. Die Bibliothek ist wirklich sehr angenehm zu gebrauchen, wenn man mit Funktionszeigern arbeiten möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923396</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 08 Jul 2010 16:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Verschiedene Funktionszeiger in einem Array on Thu, 08 Jul 2010 16:23:44 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Für so etwas würde ich dir sehr <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/function.html" rel="nofollow">boost::function</a> ans Herz legen. Die Bibliothek ist wirklich sehr angenehm zu gebrauchen, wenn man mit Funktionszeigern arbeiten möchte.</p>
</blockquote>
<p>Danke für den Tipp. Dieses Boost muss ja wirklich die eierlegende Wollmilchsaubibliothek für C++ sein.</p>
<p>Naja, mit funktionszeigern möchte ich ja nicht unbedingt arbeiten... manchmal wird jedoch dadurch der code wesentlich übersichtlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923399</guid><dc:creator><![CDATA[funktionszeiger]]></dc:creator><pubDate>Thu, 08 Jul 2010 16:23:44 GMT</pubDate></item></channel></rss>