<?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[dynamische Funktionen?]]></title><description><![CDATA[<p>Hmm ich hab ein problem. Ich schreibe gerade ein php script in C/C++ um. in php kann man die funktionen dydamisch machen sprich:<br />
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>f</mi><mi>u</mi><mi>n</mi><mi>k</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mo>=</mo><mi mathvariant="normal">&quot;</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>l</mi><mi>o</mi><mi mathvariant="normal">&quot;</mi><mo separator="true">;</mo></mrow><annotation encoding="application/x-tex">funktion = &quot;hallo&quot;;  
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03148em;">k</span><span class="mord mathit">t</span><span class="mord mathit">i</span><span class="mord mathit">o</span><span class="mord mathit">n</span><span class="mrel">=</span><span class="mord mathrm">&quot;</span><span class="mord mathit">h</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathrm">&quot;</span><span class="mpunct">;</span></span></span></span>funktion(&quot;sag hallo&quot;);<br />
dann wird die funktion hallo(&quot;sag hallo&quot;) aufgerufen.<br />
Gib es irgendeine möglichkeit das selbe mit C/C++ zu machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/103924/dynamische-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 16:37:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/103924.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Mar 2005 17:30:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dynamische Funktionen? on Mon, 14 Mar 2005 17:30:43 GMT]]></title><description><![CDATA[<p>Hmm ich hab ein problem. Ich schreibe gerade ein php script in C/C++ um. in php kann man die funktionen dydamisch machen sprich:<br />
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>f</mi><mi>u</mi><mi>n</mi><mi>k</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mo>=</mo><mi mathvariant="normal">&quot;</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>l</mi><mi>o</mi><mi mathvariant="normal">&quot;</mi><mo separator="true">;</mo></mrow><annotation encoding="application/x-tex">funktion = &quot;hallo&quot;;  
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03148em;">k</span><span class="mord mathit">t</span><span class="mord mathit">i</span><span class="mord mathit">o</span><span class="mord mathit">n</span><span class="mrel">=</span><span class="mord mathrm">&quot;</span><span class="mord mathit">h</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathrm">&quot;</span><span class="mpunct">;</span></span></span></span>funktion(&quot;sag hallo&quot;);<br />
dann wird die funktion hallo(&quot;sag hallo&quot;) aufgerufen.<br />
Gib es irgendeine möglichkeit das selbe mit C/C++ zu machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744485</guid><dc:creator><![CDATA[XzenTorXz]]></dc:creator><pubDate>Mon, 14 Mar 2005 17:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Mon, 14 Mar 2005 17:34:26 GMT]]></title><description><![CDATA[<p>Mit Funktionszeigern läuft das eingeschränkt, in diesem Fall:</p>
<pre><code class="language-cpp">typedef void (*pf)(std::string);
pf pointer = hallo;
pointer(&quot;Sag hallo&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/744489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744489</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 14 Mar 2005 17:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Mon, 14 Mar 2005 18:04:21 GMT]]></title><description><![CDATA[<p>big thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744510</guid><dc:creator><![CDATA[XzenTorXz]]></dc:creator><pubDate>Mon, 14 Mar 2005 18:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 06:39:05 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich schreibe gerade ein php script in C/C++ um</p>
</blockquote>
<blockquote>
<p>Mit Funktionszeigern läuft das eingeschränkt</p>
</blockquote>
<p>Im Falle von C, ja kann man sowas aehnliches Nachbilden .</p>
<p>Willst du C++ programmieren, vergiss funktionspointer, und nimmm virtuelle Funktionen fuer ! In C++ macht man solche Sachen eleganter mit Funktionsobjekten !</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744734</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 15 Mar 2005 06:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 08:24:26 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>Willst du C++ programmieren, vergiss funktionspointer, und nimmm virtuelle Funktionen fuer ! In C++ macht man solche Sachen eleganter mit Funktionsobjekten !</p>
</blockquote>
<p>Nein, das ist nicht richtig.</p>
<p>Polymorphie ist _eine_ Möglichkeit, aber nicht zwangsläufig die beste. Callbacks sind oft eine super Lösung. Man muss ja nicht alles in Klassen packen - da kommt dann die Interfacehölle von Java/Swing-Listener raus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744782</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 15 Mar 2005 08:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 12:41:53 GMT]]></title><description><![CDATA[<p>Naja, man muss es nicht uebertreiben wie in java .... dann wirds auch keine Hoelle</p>
<p>Virtuelle funktionen sind nunmal das Sprachmittel fuer c++ um Funktionalitaet erst zur laufzeit zu koppeln. Also damit fuer mich der Ersatz fuer funktionspointer !</p>
<p>Callbacks nehm ich naturlich nur noch, wenn ich die ueber ne C-Schnittstelle exportieren muss ... und ne Hoelle hatt ich bisher noch nicht ...<br />
Das geht auch alles ueber genau eine h-datei mit genau 1 basisklasse und Implementationsklassen fuer die entsprechenden Ausprägungen ... wo iss das unuebersichtlich ?</p>
<p>Ich hoffe du machst wenigstens die deklaration deiner funktionen static an ner klasse oder in nen namespace, oder magst mir erklaeren das globale funktionen sauber sind ? <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>Naja elegant is relativ, also ich find die C-Deklaration fuer den FunktionspointerTyp schon mega haesslich !</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744954</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 15 Mar 2005 12:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 12:56:48 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>Virtuelle funktionen sind nunmal das Sprachmittel fuer c++ um Funktionalitaet erst zur laufzeit zu koppeln. Also damit fuer mich der Ersatz fuer funktionspointer !</p>
</blockquote>
<p>Schau dir Java an. Dort werden alle Funktionszeiger mit virtuellen Methoden implementiert. Das ist nicht so das wahre...</p>
<p>Schau dir mal ein simples foreach(), find_if(), etc. an. Du hast ueberall functors - die sind auch nichts anderes als Funktionszeiger, nur dass sie auch einen status haben können.</p>
<p>Mit templates kommt man zu richtig coolen sachen wie du zB an boost::signal oder sigc++ siehst.</p>
<p>wenn du es über polymorphie machst, verlangst du automatisch objekte. das ist etwas nervig. klar, oft ist es sinnvoll, keine frage, aber immer sicher nicht.</p>
<p>beispiel aus meinem TicTacToe (siehe mein Tutorial) - da hat man ein Menu. Statt die Funktionalitaet des Menüs über virtuelle Methoden zu implementieren (und somit ne menge kleiner Klassen zu haben (was zB in Java wiederum cool wäre, weil ein menu.register(new MenuItem() { void action() { call_someone(); } }); geht) registriert man callbacks auf die applikation.</p>
<p>das spart viele objekte und macht den code auch recht klar:</p>
<p>menu.register(&quot;Help&quot;, make_callback(this, Application::help));<br />
ist doch schön, oder?</p>
<p>sonst müsste man</p>
<pre><code class="language-cpp">class HelpItem : public MenuItem
{
private:
  Application* app;
public:
  HelpItem(Application* app)
  : app(app)
  {}

  void action()
  {
    app-&gt;help();
  }
};

menu.register(new HelpItem(this));
</code></pre>
<blockquote>
<p>Das geht auch alles ueber genau eine h-datei mit genau 1 basisklasse und Implementationsklassen fuer die entsprechenden Ausprägungen ... wo iss das unuebersichtlich ?</p>
</blockquote>
<p>Beispiel: Menü mit 7 Einträgen.<br />
Du hättest plötzlich 7 Klassen die nichts anderes sind als forwarder. In Java kein Problem, in C++ sehr verwirrend, weil du wirklich nur lokale Klassen hast, die du nie mehr anfasst, nur einmal instanziierst.</p>
<blockquote>
<p>Ich hoffe du machst wenigstens die deklaration deiner funktionen static an ner klasse oder in nen namespace, oder magst mir erklaeren das globale funktionen sauber sind ? <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>
</blockquote>
<p>Was hat das damit zu tun?<br />
static mache ich funktionen aber eigentlich nie, da nehme ich lieber nen unnamed namespace...</p>
<blockquote>
<p>Naja elegant is relativ, also ich find die C-Deklaration fuer den FunktionspointerTyp schon mega haesslich !</p>
</blockquote>
<p>Man muss ja auch nicht rohe zeiger anfassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/744976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/744976</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 15 Mar 2005 12:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 16:15:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Du hast ueberall functors - die sind auch nichts anderes als Funktionszeiger</p>
</blockquote>
<p>Aehm bitte ?<br />
Paar beitraege weiter vorn hasst mir noch erklaert, das funktor != Funktionspointer :p Sonst wuerde das mit inlinen ned funktionieren .... <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>
<blockquote>
<p>wenn du es über polymorphie machst, verlangst du automatisch objekte. das ist etwas nervig.</p>
</blockquote>
<p>Ja, aber in klassischen Anwendungsfall (also da wo C Funktionspointer nimmt) brauchst du ja genau so viele funktionsdefinitionen ... ob die alle einzeln deklarierst oder an Klassen haengst, mir sind in diesem Falle die Klassen lieber.</p>
<p>Recht hasst, wenn die funktion schon exisiert, und die eigentlich in ner operation nur noch verlinken willst (daran hab ich grad ned gedacht) ... Ich nutz aber dann den funktionspointer auch nicht roh, sondern ueber makros (windows message queue) oder ueber funktoren !</p>
<p>Dein Besipiel mit dem menu iss nen reiner funktionspointer ?<br />
make_callback(this, Application::help) Application::help iss doch ned static ? Wie ist eigentlich die Aufrufsyntax ? denk this ist dein Applikation object was datzughoert ?<br />
Was passiert, wenn wer von Application ableitet um nen neues Help zu implementieren?<br />
Sorry, hab mir dein beispiel ned angeschaut ...</p>
<p>Wie gesagt in deinem fall vielleicht ned relavant, weil er sein Application Object selber coden muss ... aber in Biblios mit vielen vordefinierten Grundfunktionalitaet isses doof, weil die virtualitaet eigentlich aushebelst / verbietet ...</p>
<p>Naja, in vielen sachen isses wirklich geschmacks -Sache ... QT benutzt auch extensiv funktionspointer (Signal / Slot) Ich finds ned schoen, weil man, wenn man eigene &quot;Frameworks&quot; auf sowas aufbaut, immer zwischenfunktionen reinhaengen muss, nur dafuer dass ableitungen spaeter funktionieren<br />
oder man kann ihm Signal - Slot verbindungen ned vordefinieren ... auch doof(find ich)</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745218</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 15 Mar 2005 16:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 16:35:09 GMT]]></title><description><![CDATA[<p>Warum polymorphie / virtuelle Methoden verwenden? Ich weiß nicht, warum man ein Design so stark koppeln sollte. Vererbung ist so ziemlich die stärkste Form der Kopplung, die man herstellen kann.</p>
<p>Methodenzeiger in Kombination mit Templates sind eine sehr schöne Sache, damit kann man elegante Callbacks realisieren. Funktor-Objekte sind auch recht praktisch - ein großer Teil der STL nutzt das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745234</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 15 Mar 2005 16:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische Funktionen? on Tue, 15 Mar 2005 17:42:28 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>Aehm bitte ?<br />
Paar beitraege weiter vorn hasst mir noch erklaert, das funktor != Funktionspointer :p Sonst wuerde das mit inlinen ned funktionieren .... <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>
</blockquote>
<p>Sind wir lustig?<br />
functors sind eine Art von Funktionszeigern, lediglich ein bisschen mächtiger. Aber sie haben das selbe Prinzip wie ein Funktionszeiger...</p>
<blockquote>
<p>Ja, aber in klassischen Anwendungsfall (also da wo C Funktionspointer nimmt) brauchst du ja genau so viele funktionsdefinitionen ... ob die alle einzeln deklarierst oder an Klassen haengst, mir sind in diesem Falle die Klassen lieber.</p>
</blockquote>
<p>Blödsinn.<br />
Funktion != Klasse<br />
Es geht hierbei darum, dass du nicht immer eine fette Klasse machen kannst die alle Interfaces implementiert (schau dir mal schlecht designte Java Klasse an die 500 interfaces implementieren...) und man nicht immer für jeden forwarder eine eigene Klasse schreiben kann.</p>
<p>Wie würdest du mein Menü Beispiel mit nur einer Klasse implementieren?</p>
<blockquote>
<p>Recht hasst, wenn die funktion schon exisiert, und die eigentlich in ner operation nur noch verlinken willst (daran hab ich grad ned gedacht) ... Ich nutz aber dann den funktionspointer auch nicht roh, sondern ueber makros (windows message queue) oder ueber funktoren !</p>
</blockquote>
<p>Makros sind böse. Und rohe Zeiger fasst man sowieso nicht an...</p>
<blockquote>
<p>Dein Besipiel mit dem menu iss nen reiner funktionspointer ?<br />
make_callback(this, Application::help) Application::help iss doch ned static ? Wie ist eigentlich die Aufrufsyntax ? denk this ist dein Applikation object was datzughoert ?<br />
Was passiert, wenn wer von Application ableitet um nen neues Help zu implementieren?<br />
Sorry, hab mir dein beispiel ned angeschaut ...</p>
</blockquote>
<p>Schau dir boost::signal oder sigc++ an.<br />
Application::help ist nicht statisch und this ist vom Typ Application*</p>
<blockquote>
<p>Wie gesagt in deinem fall vielleicht ned relavant, weil er sein Application Object selber coden muss ... aber in Biblios mit vielen vordefinierten Grundfunktionalitaet isses doof, weil die virtualitaet eigentlich aushebelst / verbietet ...</p>
</blockquote>
<p>Wie willst du 10 Menü Einträge in ein Menü packen wenn jedes Item eine andere Funktion aufruft? Du kannst natürlich jedesmal das ganze Menü neu implementieren, aber das will man nicht. Man 'hängt' einfach die passende Funktion ein und fertig.</p>
<blockquote>
<p>Naja, in vielen sachen isses wirklich geschmacks -Sache ... QT benutzt auch extensiv funktionspointer (Signal / Slot) Ich finds ned schoen, weil man, wenn man eigene &quot;Frameworks&quot; auf sowas aufbaut, immer zwischenfunktionen reinhaengen muss, nur dafuer dass ableitungen spaeter funktionieren<br />
oder man kann ihm Signal - Slot verbindungen ned vordefinieren ... auch doof(find ich)</p>
</blockquote>
<p>Das ist aber der C++ weg.<br />
Warum wird denn gtkmm als schön empfunden? Eben weil es solche Sachen schön löst. Virtuelle Methoden sind nicht die Antwort auf alles, sieht man super an Java.</p>
<p>Findest du die STL Algorithm auch schlecht? Die verlangen auch oft einen Funktionszeiger. Weil Vererbung einfach blödsinnig wäre...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745284</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 15 Mar 2005 17:42:28 GMT</pubDate></item></channel></rss>