<?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[Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich zerbreche mir schon seid Tagen den Kopf :), und zwar möchte ich das ein Object (Klasse) eine Funkion von einem anderen Objekt aufruft ohne das andere Objekt zu kennen, so wie in Qt connect(). Qt möchte ich aber nicht verwenden.</p>
<p>Vereinfachter Beispiel Code:</p>
<pre><code class="language-cpp">// Basisklasse
class Object{
    ...

    public:
    void Object();

    ...
};

// Objekt 1
class Tank : public Object{
    ...

    public:
    void Tank();
    void Shoot();

    ...
};

// Objekt 2
class Button : public Object{
    ...

    public:
    void Button();
    void Click();

    ...
};

...
...

Tank *tank = new Tank();
Button *button = new Button();

// !!! Button::Click() mit Tank::Shoot() verbinden ???

button-&gt;Click();    // soll Panzer::Shoot() aufrufen/auslösen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/276563/wie-in-c-objektmethoden-miteinander-verbinden-wie-in-qt-das-connect</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:27:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276563.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Nov 2010 15:46:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 15:46:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich zerbreche mir schon seid Tagen den Kopf :), und zwar möchte ich das ein Object (Klasse) eine Funkion von einem anderen Objekt aufruft ohne das andere Objekt zu kennen, so wie in Qt connect(). Qt möchte ich aber nicht verwenden.</p>
<p>Vereinfachter Beispiel Code:</p>
<pre><code class="language-cpp">// Basisklasse
class Object{
    ...

    public:
    void Object();

    ...
};

// Objekt 1
class Tank : public Object{
    ...

    public:
    void Tank();
    void Shoot();

    ...
};

// Objekt 2
class Button : public Object{
    ...

    public:
    void Button();
    void Click();

    ...
};

...
...

Tank *tank = new Tank();
Button *button = new Button();

// !!! Button::Click() mit Tank::Shoot() verbinden ???

button-&gt;Click();    // soll Panzer::Shoot() aufrufen/auslösen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1975157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975157</guid><dc:creator><![CDATA[ghostboss]]></dc:creator><pubDate>Thu, 04 Nov 2010 15:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 15:56:07 GMT]]></title><description><![CDATA[<p>Schau dir mal das Signal/Slot Konzept an - so macht Qt es.<br />
Ich würde dir empfehlen eine bestehende Bibliothek wie <a href="http://library.gnome.org/devel/libsigc++-tutorial/stable/" rel="nofollow">libsigc++</a> oder <a href="http://www.boost.org/doc/libs/1_40_0/doc/html/signals2.html" rel="nofollow">Boost.Signals2</a> zu verwenden. Damit geht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1975158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975158</guid><dc:creator><![CDATA[Signal&#x2F;Slot]]></dc:creator><pubDate>Thu, 04 Nov 2010 15:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 21:04:01 GMT]]></title><description><![CDATA[<p>Da hilft dir das Command-Pattern weiter.</p>
<p>Kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

// Command-Interface
class Command{ public:  virtual void execute() =0;};

// Objekt 1 - Receiver 1
class Tank {
    public:
		void Shoot() {cout &lt;&lt; &quot;Tank::Shoot()\n&quot;;}
};

// Objekt 2 - Receiver 2
class Button {
    public:
    void Click(){cout &lt;&lt; &quot;Button::Click()\n&quot;;};
};

//Konkrete Command-Klasse für Tank Shoot
class Tank_shoot:public Command
{
public:
	Tank_shoot(Tank&amp; tank):tank(tank){}
		virtual void execute() { tank.Shoot();}
private:
	Tank&amp; tank;
};
//Konkrete Command-Klasse für Button Click
class Button_click:public Command
{
public:
	Button_click(Button&amp; button):button(button){}
	virtual void execute() { button.Click();}
private:
	Button&amp; button;
};
//Invoker
class Connect
{
public:
	Connect(Command&amp; c1, Command&amp; c2):c1(c1),c2(c2) {}
	void operator() (){c1.execute(); c2.execute();}
private:
	Command&amp; c1;
	Command&amp; c2;
};

int main()
{
	Tank t;
	Button b;
	Tank_shoot shoot(t);
	Button_click click(b);
	Connect connect(shoot,click);
	connect();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1975407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975407</guid><dc:creator><![CDATA[einwurf]]></dc:creator><pubDate>Thu, 04 Nov 2010 21:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 21:06:14 GMT]]></title><description><![CDATA[<p><em>Boost.Signals</em> in Verbindung mit <em>Boost.Function</em> finde ich recht praktisch. <code>function</code> und <code>bind()</code> bieten eine mächtige Möglichkeit, um Callbacks von beliebigen Funktionen, Memberfunktionen und Funktionsobjekten mit sehr wenig Code einzurichten. Würde ich mir mal anschauen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1975409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975409</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Nov 2010 21:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 21:13:56 GMT]]></title><description><![CDATA[<p>@ einwurf:<br />
Genau sowas hat man mit Boost eben nicht. Der Boilerplate-Code für Vererbung etc. ist im Prinzip nicht nötig.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;boost/signals.hpp&gt;
#include &lt;boost/bind.hpp&gt;

class Button
{
	public:
		void Click() { std::cout &lt;&lt; &quot;Button::Click()\n&quot;; }
};

class Tank
{
	public:
		void Shoot() { std::cout &lt;&lt; &quot;Tank::Shoot()\n&quot;; }
};

int main()
{
	Button b;
	Tank t;

	boost::signal&lt;void()&gt; s;
	s.connect( boost::bind(&amp;Button::Click, &amp;b) );
	s.connect( boost::bind(&amp;Tank::Shoot, &amp;t) );
	s();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1975413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975413</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Nov 2010 21:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Thu, 04 Nov 2010 21:24:27 GMT]]></title><description><![CDATA[<p>Jo, Danke für eure Posts. Das mit Boost gefählt mir :D.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1975421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975421</guid><dc:creator><![CDATA[ghostboss]]></dc:creator><pubDate>Thu, 04 Nov 2010 21:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Fri, 05 Nov 2010 03:46:04 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>@ einwurf:<br />
Genau sowas hat man mit Boost eben nicht. Der Boilerplate-Code für Vererbung etc. ist im Prinzip nicht nötig.</p>
</blockquote>
<p>Dafür ist es grauenhaft zu debuggen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1975487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975487</guid><dc:creator><![CDATA[jaber]]></dc:creator><pubDate>Fri, 05 Nov 2010 03:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Fri, 05 Nov 2010 08:04:22 GMT]]></title><description><![CDATA[<p>jaber schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>@ einwurf:<br />
Genau sowas hat man mit Boost eben nicht. Der Boilerplate-Code für Vererbung etc. ist im Prinzip nicht nötig.</p>
</blockquote>
<p>Dafür ist es grauenhaft zu debuggen.</p>
</blockquote>
<p>(Bedingte) Haltepunkte helfen. Nur step by step sollte man vielleicht nicht durch den Code gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1975510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1975510</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 05 Nov 2010 08:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Tue, 09 Nov 2010 17:14:41 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>@ einwurf:<br />
Genau sowas hat man mit Boost eben nicht. Der Boilerplate-Code für Vererbung etc. ist im Prinzip nicht nötig.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;boost/signals.hpp&gt;
#include &lt;boost/bind.hpp&gt;

class Button
{
	public:
		void Click() { std::cout &lt;&lt; &quot;Button::Click()\n&quot;; }
};

class Tank
{
	public:
		void Shoot() { std::cout &lt;&lt; &quot;Tank::Shoot()\n&quot;; }
};

int main()
{
	Button b;
	Tank t;

	boost::signal&lt;void()&gt; s;
	s.connect( boost::bind(&amp;Button::Click, &amp;b) );
	s.connect( boost::bind(&amp;Tank::Shoot, &amp;t) );
	s();
}
</code></pre>
</blockquote>
<p>Wie kann ich denn jetzt eine Funktion erstellen die &quot;&amp;Tank::Shoot&quot; als Argument erwartet?</p>
<pre><code class="language-cpp">Button::SetClick( ??? &amp;shoot, Tank &amp;t){
    ...connect( boost::bind(shoot, t) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1977966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977966</guid><dc:creator><![CDATA[ghostboss]]></dc:creator><pubDate>Tue, 09 Nov 2010 17:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wie in C++ Objektmethoden miteinander verbinden, wie in Qt das connect? on Wed, 10 Nov 2010 14:58:30 GMT]]></title><description><![CDATA[<p>ghostboss schrieb:</p>
<blockquote>
<p>Wie kann ich denn jetzt eine Funktion erstellen die &quot;&amp;Tank::Shoot&quot; als Argument erwartet?</p>
<pre><code class="language-cpp">Button::SetClick( ??? &amp;shoot, Tank &amp;t){
    ...connect( boost::bind(shoot, t) );
}
</code></pre>
</blockquote>
<p>Nimm doch einfach ein Funktions-Objekt als Parameter entgegen:</p>
<pre><code class="language-cpp">template&lt;class Fun&gt;
Button::SetClick(Fun f){
    ...connect(f);
}
</code></pre>
<p>SetClick kannst Du dann ja mit boost::bind aufrufen.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1978512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978512</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 10 Nov 2010 14:58:30 GMT</pubDate></item></channel></rss>