<?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[Callback mit Memberfunktionen]]></title><description><![CDATA[<p>Hallo...<br />
Ist es möglich mit Memberfunktionen ein Callbacksystem zu erstellen? Die Klasse leitet von einem Interface ab. Es soll dennoch möglich sein, dass man eigene Funktionsnamen verwendet. Geht so etwas?</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">typedef void (IAddon::*)(std::string Bla) EventCallback;

// ...
class Addon : public IAddon
{
public:
    virtual void DoSomething()
    {
        AddonManager-&gt;RegisterEvent(this, Addon::MyFunc, &quot;player_spawn&quot;);
        // Signatur: RegisterEvent(IAddon *pAddon, EventCallback CB, std::string EventName);
    }
    void MyFunc(std::string Bla)
    {
        // mach was
    }
};
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264818/callback-mit-memberfunktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 13:20:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264818.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Apr 2010 11:51:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 11:52:08 GMT]]></title><description><![CDATA[<p>Hallo...<br />
Ist es möglich mit Memberfunktionen ein Callbacksystem zu erstellen? Die Klasse leitet von einem Interface ab. Es soll dennoch möglich sein, dass man eigene Funktionsnamen verwendet. Geht so etwas?</p>
<p>Pseudocode:</p>
<pre><code class="language-cpp">typedef void (IAddon::*)(std::string Bla) EventCallback;

// ...
class Addon : public IAddon
{
public:
    virtual void DoSomething()
    {
        AddonManager-&gt;RegisterEvent(this, Addon::MyFunc, &quot;player_spawn&quot;);
        // Signatur: RegisterEvent(IAddon *pAddon, EventCallback CB, std::string EventName);
    }
    void MyFunc(std::string Bla)
    {
        // mach was
    }
};
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882094</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 13 Apr 2010 11:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 12:09:22 GMT]]></title><description><![CDATA[<p>boost::function</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882107</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 13 Apr 2010 12:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 12:11:18 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef void (IAddon::*)(std::string Bla) EventCallback;
</code></pre>
</blockquote>
<p>Ich denk mal du meinst:</p>
<pre><code class="language-cpp">typedef void (IAddon::* EventCallback)(std::string Bla);
</code></pre>
<p>theliquidwave schrieb:</p>
<blockquote>
<p>Es soll dennoch möglich sein, dass man eigene Funktionsnamen verwendet. Geht so etwas?</p>
</blockquote>
<p>Ja, aber wozu hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882110</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Tue, 13 Apr 2010 12:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 12:53:09 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Ist es möglich mit Memberfunktionen ein Callbacksystem zu erstellen?</p>
</blockquote>
<p>An sich ja, aber zuerst die Gegenfrage:<br />
Ist dir der Unterschied zwischen einer (nicht-statischen) Memberfunktion und einer Funktion bewusst?</p>
<p>Wenn nein, solltest du dir erst einmal darüber Gedanken machen. Grundsätzlich reicht es bei einer nicht-statischen Memberfunktion nicht aus, einen Zeiger auf die Memberfunktion zu speichern, sondern du erforderst auch einen Zeiger auf die konkrete Instanz um den Aufruf durchzuführen.</p>
<p>Der TR1 mit function/bind oder die boost-Entsprechungen könnten hier weiter helfen.</p>
<p>Ganz davon abgesehen würde ich Copy-By-Value bei nicht-integralen Datentypen vermeiden (ich beziehe mich hier auf deine std::string Übergabe, meist ist hier eine konstante Referenz als Übergabeparameter weitaus sinnvoller).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882134</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 13 Apr 2010 12:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 14:04:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Ja, aber wozu hier?</p>
</blockquote>
<p>Weil man mehrere Events (&gt;100) registrieren _könnte_. Dann alles in eine Funktion, die in IAddon virtual ist, zu leiten, um dann alles mit if-Abfragen zu machen, finde ich doch sehr hässlich.</p>
<blockquote>
<p>Ist dir der Unterschied zwischen einer (nicht-statischen) Memberfunktion und einer Funktion bewusst?</p>
</blockquote>
<p>Normalerweise schon. Es geht mir ja eben darum, dass die Funktion nicht-statisch sind. Bei statischen Funktionen habe ich das Instanzen- und Memberproblem ja nicht.</p>
<blockquote>
<p>Der TR1 mit function/bind oder die boost-Entsprechungen könnten hier weiter helfen.</p>
</blockquote>
<p>Geht das ganze nicht irgendwie anders? Die Interfaces sollen nämlich an Autoren weitergegeben werden, die möglichst einfach eine Funktion registrieren können sollen. So ein Gefrickel mit boost ist doch dann extrem kompliziert, und nur um das zu realisieren müsste ich die ganze boost-Lib einbinden...</p>
<blockquote>
<p>Ganz davon abgesehen würde ich Copy-By-Value bei nicht-integralen Datentypen vermeiden (ich beziehe mich hier auf deine std::string Übergabe, meist ist hier eine konstante Referenz als Übergabeparameter weitaus sinnvoller).</p>
</blockquote>
<p>Stimmt, war auch eher Beispielhaft. Normalerweise verwende ich <code>const std::string &amp;StringName;</code></p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882176</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 13 Apr 2010 14:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 14:22:57 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<blockquote>
<p>Der TR1 mit function/bind oder die boost-Entsprechungen könnten hier weiter helfen.</p>
</blockquote>
<p>Geht das ganze nicht irgendwie anders? Die Interfaces sollen nämlich an Autoren weitergegeben werden, die möglichst einfach eine Funktion registrieren können sollen. So ein Gefrickel mit boost ist doch dann extrem kompliziert, und nur um das zu realisieren müsste ich die ganze boost-Lib einbinden...</p>
</blockquote>
<p>Du könntest schauen wie boost das macht und es nachprogrammieren. Oder <a href="http://codeplea.com/pluscallback" rel="nofollow">das hier</a> nehmen. Oder eines der sechshundert Milliarden Functionpointer-Tutorials lesen und von dort klauen.<br />
Ob das dann weniger Gefrickel ist als mit boost, sei mal dahingestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882196</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 13 Apr 2010 14:22:57 GMT</pubDate></item><item><title><![CDATA[Reply to Callback mit Memberfunktionen on Tue, 13 Apr 2010 14:25:14 GMT]]></title><description><![CDATA[<p>Danke!<br />
Das ist genau das, was ich gesucht habe <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882200</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 13 Apr 2010 14:25:14 GMT</pubDate></item></channel></rss>