<?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[boost::signal: Memberfunktionen]]></title><description><![CDATA[<p>Hi.<br />
Hab am WE versucht mit boost::signals ein wenig rumzuspielen, aber so richtig schlau werd ich aus der Doku nicht. Hab jetzt libsigc++ erstmal genommen, denn da geht das so wie ich das möchte, allerdings nervt es mich, dass ich das nicht gelöst habe, deswegen frage ich euch :).<br />
Hier erstmal ein wenig minimalster Code wie ich es mit libsigc++ gemacht habe:</p>
<pre><code class="language-cpp">class EventEmitter
{
public:
    typedef sigc::signal&lt;void, const std::string&amp;&gt; Signal;
    typedef sigc::slot&lt;void, const std::string&amp;&gt; Slot;

private:
    Signal m_event;

public:    
    sigc::connection connect(Slot&amp; slot)
    {
        return m_event.connect(slot);
    }

    run()
    {
       m_event.emit(&quot;foobar&quot;);
    }
};

class EventReceiver : public sigc::trackable
{
public:
    void Event(const std::string&amp; msg)
    {
        std::cout &lt;&lt; &quot;Event :&quot; &lt;&lt; msg &lt;&lt; std::endl;
    }
};

int main(int argc, char** argv)
{
    EventEmitter emitter;
    EventReceiver e;
    emitter.connect(sigc::slot(sigc::mem_fun(&amp;e, &amp;EventReceiver::Event)));
    emitter.run();
}
</code></pre>
<p>Ich denke man sieht, was ich möchte. Ich möchte Klassenmethoden als Event-Funktion zu registrieren. Das geht unter boost::signals anscheinend nicht..<br />
Oder liege ich falsch? <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="🙂"
    /><br />
rya.</p>
<p>edit ps: Ich hab den Code jetzt nicht getestet, könnte evtl ein Flüchtigkeits-Fehler drin sein, aber er zeigt wo ich hin wil...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235975/boost-signal-memberfunktionen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 02:59:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235975.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2009 11:56:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::signal: Memberfunktionen on Mon, 09 Mar 2009 12:00:48 GMT]]></title><description><![CDATA[<p>Hi.<br />
Hab am WE versucht mit boost::signals ein wenig rumzuspielen, aber so richtig schlau werd ich aus der Doku nicht. Hab jetzt libsigc++ erstmal genommen, denn da geht das so wie ich das möchte, allerdings nervt es mich, dass ich das nicht gelöst habe, deswegen frage ich euch :).<br />
Hier erstmal ein wenig minimalster Code wie ich es mit libsigc++ gemacht habe:</p>
<pre><code class="language-cpp">class EventEmitter
{
public:
    typedef sigc::signal&lt;void, const std::string&amp;&gt; Signal;
    typedef sigc::slot&lt;void, const std::string&amp;&gt; Slot;

private:
    Signal m_event;

public:    
    sigc::connection connect(Slot&amp; slot)
    {
        return m_event.connect(slot);
    }

    run()
    {
       m_event.emit(&quot;foobar&quot;);
    }
};

class EventReceiver : public sigc::trackable
{
public:
    void Event(const std::string&amp; msg)
    {
        std::cout &lt;&lt; &quot;Event :&quot; &lt;&lt; msg &lt;&lt; std::endl;
    }
};

int main(int argc, char** argv)
{
    EventEmitter emitter;
    EventReceiver e;
    emitter.connect(sigc::slot(sigc::mem_fun(&amp;e, &amp;EventReceiver::Event)));
    emitter.run();
}
</code></pre>
<p>Ich denke man sieht, was ich möchte. Ich möchte Klassenmethoden als Event-Funktion zu registrieren. Das geht unter boost::signals anscheinend nicht..<br />
Oder liege ich falsch? <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="🙂"
    /><br />
rya.</p>
<p>edit ps: Ich hab den Code jetzt nicht getestet, könnte evtl ein Flüchtigkeits-Fehler drin sein, aber er zeigt wo ich hin wil...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676605</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 09 Mar 2009 12:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to boost::signal: Memberfunktionen on Mon, 09 Mar 2009 12:41:09 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Das geht unter boost::signals anscheinend nicht..<br />
Oder liege ich falsch? <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>Natürlich <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>Ich denke, was du suchst ist boost::bind. Dein Beispiel würde dann in etwa so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;boost/signals.hpp&gt;
#include &lt;boost/bind.hpp&gt;

class EventEmitter
{
public:
    typedef boost::signal&lt;void (std::string const &amp;)&gt; Signal;

private:
    Signal m_event;

public:
    boost::signals::connection connect(Signal::slot_type slot)
    {
        return m_event.connect(slot);
    }

    void run()
    {
       m_event(&quot;foobar&quot;);
    }
};

class EventReceiver
{
public:
    void Event(const std::string&amp; msg)
    {
        std::cout &lt;&lt; &quot;Event :&quot; &lt;&lt; msg &lt;&lt; std::endl;
    }
};

int main(int argc, char** argv)
{
    EventEmitter emitter;
    EventReceiver e;
    emitter.connect(boost::bind(&amp;EventReceiver::Event, e, _1));
    emitter.run();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676649</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 09 Mar 2009 12:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to boost::signal: Memberfunktionen on Mon, 09 Mar 2009 13:06:02 GMT]]></title><description><![CDATA[<p>Danke! <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="👍"
    /><br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676672</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 09 Mar 2009 13:06:02 GMT</pubDate></item></channel></rss>