<?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[methode binden]]></title><description><![CDATA[<p>hej leute hab mal ne kurze frage:<br />
wie kann ich eine methode einer klasse an eine andere methode einer anderen klasse binden?<br />
ich habe eine klasse A in der die methode binde(void(*func)(int parameter)) ist.<br />
jetzt möchte ich eine methode einer anderen klasse binden.<br />
aber ich glaube das 20 zeilen quellcode mehr sagen als 1000 worte <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A {
  public:
  void (*doit)(int);
  void binde(void(*func)(int)) {
    doit = func;
  };
};

class B{
  void das_hier(int x) {
    std::cout &lt;&lt; x &lt;&lt; std::endl;
  }
  A a;
  public:
  void connect() {
    a.binde(&amp;B::das_hier);
  }
};

int main() {
  B b;
  A a;
  b.connect();
  a.doit(12);
  return 0;
}
</code></pre>
<p>kann mir da einer helpen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282688/methode-binden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 18:25:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282688.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Feb 2011 15:45:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 15:45:23 GMT]]></title><description><![CDATA[<p>hej leute hab mal ne kurze frage:<br />
wie kann ich eine methode einer klasse an eine andere methode einer anderen klasse binden?<br />
ich habe eine klasse A in der die methode binde(void(*func)(int parameter)) ist.<br />
jetzt möchte ich eine methode einer anderen klasse binden.<br />
aber ich glaube das 20 zeilen quellcode mehr sagen als 1000 worte <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A {
  public:
  void (*doit)(int);
  void binde(void(*func)(int)) {
    doit = func;
  };
};

class B{
  void das_hier(int x) {
    std::cout &lt;&lt; x &lt;&lt; std::endl;
  }
  A a;
  public:
  void connect() {
    a.binde(&amp;B::das_hier);
  }
};

int main() {
  B b;
  A a;
  b.connect();
  a.doit(12);
  return 0;
}
</code></pre>
<p>kann mir da einer helpen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025961</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Thu, 24 Feb 2011 15:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 16:00:49 GMT]]></title><description><![CDATA[<p>Falsches Forum: hier ist C++/CLI, das ist nicht C++.</p>
<p>Guck Dir doch mal boost::function (oder std::tr1::function) an, bzw. irgendeine Signal &amp; Slot impl. z.B. boost::signals2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025970</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 24 Feb 2011 16:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 16:03:30 GMT]]></title><description><![CDATA[<p>ou scheisse habs übersehen. thread kann gelöscht werden. erstellen den in c++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025973</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Thu, 24 Feb 2011 16:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 16:52:30 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f58" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025995</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 24 Feb 2011 16:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 17:14:55 GMT]]></title><description><![CDATA[<p>das geht doch glaube ich nicht.<br />
ich bin mir nicht sicher, mir ging vorn paar tagen etwa das gleiche durch den kopf ob man delegates ohne objekte spichern kann (ist das so richtig ausgedrückt?!?)</p>
<p>normalerweise müsste die funktions pointer deklaration nämlich noch die klasse beinhalten</p>
<pre><code class="language-cpp">// also nicht nur:
void (*func)(int);

// sondern:
void (*Klasse1::method)(int);
</code></pre>
<p>bin mir aber weder bei der syntax noch bei der richtigkeit meiner antwort sicher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026009</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 24 Feb 2011 17:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Thu, 24 Feb 2011 17:26:13 GMT]]></title><description><![CDATA[<p>Mit <code>std::tr1::function</code> kannst du alles Aufrufbare speichern, also Funktionszeiger, Memberfunktionszeiger und Funktionsobjekte. Mit <code>std::tr1::bind()</code> kannst du sehr kompakt neue Funktionen zusammensetzen.</p>
<p>Das sind sehr mächtige Werkzeuge, die leider viele C++-Programmierer nicht kennen und deshalb oft umständlichere Lösungen über Laufzeitpolymorphie entwickeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026017</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Feb 2011 17:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 11:20:04 GMT]]></title><description><![CDATA[<p>habs jetzt erstmal so gelöst.</p>
<pre><code class="language-cpp">#include &lt;boost/bind.hpp&gt;
#include &lt;boost/function.hpp&gt;

#include &lt;iostream&gt;

class A {
  public:
  boost::function&lt;void (int)&gt; doit2;
};

class B{
  public:
  void das_hier(int x) {
    std::cout &lt;&lt; x &lt;&lt; std::endl;
  }
  A a;
  void doit(int _x) {
    a.doit2(_x);
  }
  void connect() {
    a.doit2 = boost::bind(boost::mem_fn(&amp;B::das_hier), this, _1);
  }
};

int main() {
  B b;
  b.connect();
  b.doit(1234);

  return 0;
}
</code></pre>
<p>bekomme es aber nicht hin, dass eine methode der Klasse <strong>A</strong> die bindung erledigt. ich möchtedie bindung, die in <strong>B::connect</strong> geschieht, durch Klasse <strong>A</strong> erzeugen. kennt da jemand ne möglichkeit?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a><br />
ich verwende boost bibliotheken. die haben sehr ähnliche klassen, die aber, soweit ich weiss, etwas mächtiger sind, weil sie nicht auf anzahl parameter beschränken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030721</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Mon, 07 Mar 2011 11:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 12:41:52 GMT]]></title><description><![CDATA[<p>habs glaube ich hinbekommen... <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 />
stand wohl n bisschen aufm schlauch <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="🙄"
    /><br />
falls jemand verbesserungen kennt immer her damit. ansonnsten danke an alle die geholfen haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<pre><code class="language-cpp">#include &lt;boost/bind.hpp&gt;
#include &lt;boost/function.hpp&gt;

#include &lt;iostream&gt;

class A {
  public:
  boost::function&lt;void (int)&gt; doit;
  void binde(boost::function&lt;void (int)&gt; _func) {
    doit = _func;
  };
};

class B{
  A a;
  void das_hier(int x) {
    std::cout &lt;&lt; x &lt;&lt; std::endl;
  }

  public:
  void doit(int _x) {
    a.doit(_x);
  }

  void connect() {
    a.binde(boost::bind(&amp;B::das_hier, this, _1));
  }
};

int main() {
  B b;
  b.connect();
  b.doit(134234);

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2030739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030739</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Mon, 07 Mar 2011 12:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 12:08:09 GMT]]></title><description><![CDATA[<p>Kannst Du mal erklären, was Du genau erreichen willst? Also nicht, <em>wie</em> Du es machen willst, sondern <em>was</em> Du machen willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030741</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 07 Mar 2011 12:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 12:11:17 GMT]]></title><description><![CDATA[<p>pi88el schrieb:</p>
<blockquote>
<p>falls jemand verbesserungen kennt immer her damit. ansonnsten danke an alle die geholfen haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<pre><code class="language-cpp">int main() {
  B b;
  b.das_hier(134234);

  return 0;
}
</code></pre>
<p>Tut genau das Gleiche, auf das gleiche Objekt. Nur ohne Bindung. Was soll die Indirektion hier bringen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030743</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 07 Mar 2011 12:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 12:36:06 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Kannst Du mal erklären, was Du genau erreichen willst? Also nicht, <em>wie</em> Du es machen willst, sondern <em>was</em> Du machen willst?</p>
</blockquote>
<p>klasse <strong>A</strong> ist eine relativ große klasse die selbständig in einem eigenen thread bestimmte dinge ausführt. klasse <strong>B</strong> steht für einige verschiedene klassen die klasse A verwenden. wenn irgendwelche events in klasse A passieren sollen bestimmte methoden der jeweiligen klasse B oder zum teil auch normale funktionen ausgeführt werden. deswegen binde ich bestimmte methoden an diese events. threadsicherheit muss dadurch vollständig in klasse B gewährleistet sein. hätte auch vererbung einsetzten können, was aber bei (&quot;globalen&quot;) funktionen wieder verkompliziert wird.<br />
so wie ich es jetzt gemacht habe, kann ich sowohl funktionen als auch methoden binden.</p>
<p>soviel zum hintergrund. wie gesagt wenn jemand ne bessere lösung hat her mit... kann mich aber nicht zu lange aufhalten damit... sollte diese woche vertig werden.</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Tut genau das Gleiche, auf das gleiche Objekt. Nur ohne Bindung. Was soll die Indirektion hier bringen?</p>
</blockquote>
<p>hier nichts. ist nur ein kleines beispiel. das richtige projekt ist etwas größer. und zuviel quelltext zu posten führt meistens dazu das sich den niemand durchliest weil es zu anstrengend ist sich in code von paar hundert zeilen einzuarbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030750</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Mon, 07 Mar 2011 12:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 14:11:58 GMT]]></title><description><![CDATA[<p>Irgendwie so?</p>
<pre><code class="language-cpp">class Service //Deine Klasse A
{
public:
    typedef boost::function&lt;void (int)&gt; ServiceCallback;

    void registerCallback(ServiceCallback const &amp; callback)
    {
        this-&gt;callback = callback;
    }
private:
    void serviceRoutine()
    {
        //laeuft in einem Thread...
        for(;;)
        {
            //...
            if(!callback.emtpy() &amp;&amp; event)
            {
                callback(foo);
            }            
        }
    }

    ServiceCallback callback;
};

class B
{
public:
    void handleEvent(int a)
    {
        //was auch immer
    }
};

int main()
{
    Service service;
    B item;

    service.registerCallback(boost::bind(&amp;B::handleEvent, &amp;item, _1));    
}
</code></pre>
<p>So ist es flexibler, weil so der Service nichts mehr von seinen Clients wissen muss. Wenn es unterschiedliche Events gibt, welche unterschiedliche Funktionen auslösen sollen, dann packe z.B. mehrere Funktoren in eine <code>std::map</code> und löse die passende Funktion aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030805</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 07 Mar 2011 14:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to methode binden on Mon, 07 Mar 2011 14:29:59 GMT]]></title><description><![CDATA[<p>ja genau so habe ich es gemeint. und genauso mach ich es ja auch. nur das ich die bindung inerhalb der klasse B mache. sonnst sehe ich da kein unterschied.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030818</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Mon, 07 Mar 2011 14:29:59 GMT</pubDate></item></channel></rss>