<?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[Anfänger: Problem mit Functionpointern]]></title><description><![CDATA[<p>Sers, also folgendes<br />
Ich hab mir ein Tutorial zu Functionpointern durchgelesen (<a href="http://www.newty.de" rel="nofollow">http://www.newty.de</a>) und wollte mal sehn ob ich das richtig verstanden habe...aber wie's so is, scheitert man schonmal an der Eingangshürde.</p>
<p>Also folgendes schwebt mir vor:</p>
<p>Ich möchte einer Klasse eine Methode dynamisch zuweisen. Das Prinzip ist dabei:<br />
- definiere einen Typ für die Function<br />
- definiere eine private Methode der Klasse welche von diesem Typ ist.<br />
- definiere eine public Methode welche die Private Methode aufruft.<br />
- definiere eine setter-Methode mit der man die Private Methode an eine beliebige Methode binden kann.</p>
<p>Und so sieht das bei mir aus:</p>
<pre><code class="language-cpp">// deklaration of function pointer types
typedef bool (*TClick_CallBack)();

class TglObject
{ //Baseobject for hirarchy of all ui-objects	
  private:
    TClick_CallBack DoClick();

  public:  
	// Callbacksetters
	void SetOnClick(TClick_CallBack func) {&amp;TglObject::DoClick = func;};

	// Methods
	bool OnClick();
};
</code></pre>
<p>Die Funktion SetOnClick is der Hacken. Nun wüßte ich gerne, wie ich die übergebne Function func so an DoClick binden kann, dass wenn ich DoClick aufrufe der Code ausgeführt wird, der in func defniert wurde. Ganz einfach... <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/119126/anfänger-problem-mit-functionpointern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 20:09:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119126.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Aug 2005 12:54:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 12:54:49 GMT]]></title><description><![CDATA[<p>Sers, also folgendes<br />
Ich hab mir ein Tutorial zu Functionpointern durchgelesen (<a href="http://www.newty.de" rel="nofollow">http://www.newty.de</a>) und wollte mal sehn ob ich das richtig verstanden habe...aber wie's so is, scheitert man schonmal an der Eingangshürde.</p>
<p>Also folgendes schwebt mir vor:</p>
<p>Ich möchte einer Klasse eine Methode dynamisch zuweisen. Das Prinzip ist dabei:<br />
- definiere einen Typ für die Function<br />
- definiere eine private Methode der Klasse welche von diesem Typ ist.<br />
- definiere eine public Methode welche die Private Methode aufruft.<br />
- definiere eine setter-Methode mit der man die Private Methode an eine beliebige Methode binden kann.</p>
<p>Und so sieht das bei mir aus:</p>
<pre><code class="language-cpp">// deklaration of function pointer types
typedef bool (*TClick_CallBack)();

class TglObject
{ //Baseobject for hirarchy of all ui-objects	
  private:
    TClick_CallBack DoClick();

  public:  
	// Callbacksetters
	void SetOnClick(TClick_CallBack func) {&amp;TglObject::DoClick = func;};

	// Methods
	bool OnClick();
};
</code></pre>
<p>Die Funktion SetOnClick is der Hacken. Nun wüßte ich gerne, wie ich die übergebne Function func so an DoClick binden kann, dass wenn ich DoClick aufrufe der Code ausgeführt wird, der in func defniert wurde. Ganz einfach... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/860050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860050</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 12:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 13:57:51 GMT]]></title><description><![CDATA[<p>Isses zu einfach oder zu schwehr? Ich für meinen Teil wüßt gern mehr!</p>
<p>PS: Poet auf Heimaturlaub. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/860095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860095</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 13:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 14:03:20 GMT]]></title><description><![CDATA[<p>Diese private Membervariable eh Funktion ist nicht das Wahre und afaik nicht funktionstüchtig. Sieh dir das hier mal an:</p>
<pre><code class="language-cpp">class Example
{
    typedef bool (*Function) ();

    Function m_func;

public:
    Example ()
        :
    m_func(0)
    {
    }

    void callFunc ()
    {
        if(m_func)
            m_func();
    }

    void setFunc (Function func) { m_func = func; }
};
</code></pre>
<p>Jetzt kannst du jede Funktion mit der Signatur bool() zuweisen. Bei Methoden-Pointern wirds schwerer. Da musst du vorher die Klasse wissen bzw. ein Template anlegen:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Example
{
    typedef bool (*Example::Method) ();

    Method m_method;

public:
    Example (Method method)
        :
    m_method(method)
    {
    }

    bool myMethod ()
    {
        return true;
    }
};

// ok stupides beispiel...
Example&lt;Example&gt; (&amp;Example::myMethod);
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860103</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 28 Aug 2005 14:03:20 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 14:20:26 GMT]]></title><description><![CDATA[<p>Also mit Templates ... öhm ... Ich versteh gerade nicht so recht was das alles soll...</p>
<p>Wie muss ich meinen Code verändern, damit ich func zuweisen kann.</p>
<p>Nochmal der Code</p>
<pre><code class="language-cpp">// deklaration of function pointer types
typedef bool (*TClick_CallBack)();

class TglObject
{ //Baseobject for hirarchy of all ui-objects   
  private:
    TClick_CallBack DoClick();

  public:  
    // Callbacksetters
    void SetOnClick(TClick_CallBack func) {&amp;TglObject::DoClick = func;};

    // Methods
    bool OnClick();
};
</code></pre>
<p>Bei SetOnClick sagt mir der Compiler: &quot;non-lvalue in assignment&quot; Keine Ahnung was das heißen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860112</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 14:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 14:23:53 GMT]]></title><description><![CDATA[<p>Du kannst die Adresse einer Funktion nicht verändern... WTF soll das?</p>
<p>Guckst du hier --&gt;<br />
<a href="http://www.newty.de/fpt/index.html" rel="nofollow">http://www.newty.de/fpt/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/860113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860113</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sun, 28 Aug 2005 14:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 14:31:52 GMT]]></title><description><![CDATA[<p>Das Tutorial war das besagt, was ich schonmal gelsen hab...anscheinend aber nicht ausreichend durchdrungen.</p>
<p>Wie kann ich denn eine nichtstatische Memberfunction zur laufzeit umbiegen? Also ich will, dass beim aufruf von MeineKlasse.Draw eine Function aufgerufen wird, die ich der Klasse vorher mit MeineKlasse.SetDraw mitgeteilt habe.</p>
<p>Ich hoffe, wenn ich den passenden Code sehe versteh ich auch wieso es im moment nicht funktioniert. (Wobei ich durch den letzten Komentar schon ne Ahnung hab...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860116</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 14:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 15:34:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// deklaration of function pointer types
typedef bool (*TClick_CallBack)();

class TglObject
{ //Baseobject for hirarchy of all ui-objects   
  private:
    //TClick_CallBack DoClick();    //soll das ne membervariable sein?
    TClick_CallBack DoClick;

  public:  
    // Callbacksetters
    void SetOnClick(TClick_CallBack func) {DoClick = func;};

    // Methods
    bool OnClick();
};
</code></pre>
<p>Mir ist nicht wirklich klr, was du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860148</guid><dc:creator><![CDATA[ness]]></dc:creator><pubDate>Sun, 28 Aug 2005 15:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 18:10:10 GMT]]></title><description><![CDATA[<p>Ok ich erklärs nochmal genauer:</p>
<p>Ich möchte eine GUI schreiben. (Die Theorie dahinter ist kein Problem. Mit Delphi könnte ich das sicherlich einfach hinschreiben, aber es soll diesmal C++ werden.)<br />
Für eine GUI ist es notwendig Buttons dynamische Ereignisbehandlungsroutinen zu zuweisen. Also der Instanz A eines Buttons möchte ich eindere Behandlungsmethode für OnClick Ereignisse zuweisen als der Instanz B.</p>
<p>Meine Idee war der Klasse Button im private Teil einen Functionpointer zu geben, der auf die jeweilige Behandlungsroutine zeigt. Über einen öffentlichen Setter sollte man diesen Functionpointer setzen können. Und über eine öffentliche Methode z.B. OnClick() sollte der private Functionpointer aufgerufen werden.</p>
<p>Was bei mir momentan nicht geht, ist dem privaten Functionpointer DoClick die in Func übergebene Methode zu verpassen.</p>
<p>Ich hoffe meine Code-Versuche weiter oben sind jetzt verständlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860241</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 18:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 18:44:29 GMT]]></title><description><![CDATA[<p>Das macht man normal so:</p>
<pre><code class="language-cpp">class button {

protected:
    int posX, posY; // etc....

public:
    button();
    virtual ~button();
    virtual void onClick( /* ... */ ) = 0;
    virtual void onMouseOver( /* ... */ ) = 0;

};

// dann leitet sich der benutzer einen eigenen button ab

class myExitButton : public button {
public:
    void onClick( /* ... */ ) { exit(0); }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/860255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860255</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sun, 28 Aug 2005 18:44:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 20:43:36 GMT]]></title><description><![CDATA[<p>Also das macht man ganz bestimmt nicht so. Vererbung benutzt man um Klassenhierarchien aufzubauen, und nicht um Verschiedene Instanzen einer Klasse zu modifizieren.</p>
<p>Was soll ich den mit einer ExitButton Klasse. Da muss ich ja für jeden Button eine eigene Klasse ableiten, und die is dann ohne ende Spezialisiert auf diese eine Funktion.</p>
<p>Geht das was ich gefragt habe denn nicht in C++? Ohne irgendeinen Trick_17?</p>
<p>(Um mal nicht ganz so herablassend zu klingen. Exact das was du beschreibst habe ich in einem älteren Projekt gemacht. Was am ende rauskam entspricht nicht der Art Code die ich je wieder schreiben möchte. Wenn du eine umfangreiche GUI mit dieser Methode schreiben möchtest wirst du schnell merken, dass das nicht das wahre ist. <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>----<br />
Und die Sache mit &quot;Den Functionpointer im Constructor übergeben&quot; finde ich ... hmmm ... also wenns ne bessere Lösung gibt, wäre ich davon sehr angetan. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/860317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860317</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 20:43:36 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 21:09:07 GMT]]></title><description><![CDATA[<p>Man glaubt es kaum: <a href="http://www.antivoid.za.net/index.php/tutorials/functionpointers.php" rel="nofollow">http://www.antivoid.za.net/index.php/tutorials/functionpointers.php</a> Kapitel &quot;Callbacks&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860342</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 21:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 21:16:46 GMT]]></title><description><![CDATA[<p>Wird natürlich intressanter wenn du mal Callbacks auf Memberfunktionen machwn willst... Das hätte ich (und andere sicher auch) dir auch sagen können.</p>
<p>Du hast es ja selber gesagt:</p>
<blockquote>
<p>- definiere eine setter-Methode mit der man die Private Methode an eine beliebige Methode binden kann.</p>
</blockquote>
<p>Will mal sehen wie du das damit vereinbahrst.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860346</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sun, 28 Aug 2005 21:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 21:42:27 GMT]]></title><description><![CDATA[<p>Hab mich vielleicht unklar ausgedrückt. Sorry.<br />
Aber was ist der Unterschied zwischen dem Code in diesem Tutorial und dem von mir? Ich steh da momentan etwas ratlos da...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860357</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 21:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 21:50:41 GMT]]></title><description><![CDATA[<p>Jetzt gehts...Ich werd verrückt...Also...Aber das was gerade erfolgreich meinen Compiler passiert hat, war vor einigen Stunden noch falsch....glaub ich.</p>
<p>Naja Egal...jetzt gehts. Danke euch für eure Zeit. Sorry, für den Schmarn der zwischenzeitlich geschrieben wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860360</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Sun, 28 Aug 2005 21:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Problem mit Functionpointern on Sun, 28 Aug 2005 21:51:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber das was gerade erfolgreich meinen Compiler passiert hat, war vor einigen Stunden noch falsch</p>
</blockquote>
<p>Ganz bestimmt, dass wars :p</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860361</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 28 Aug 2005 21:51:50 GMT</pubDate></item></channel></rss>