<?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[Funktionscontainer?]]></title><description><![CDATA[<p>hallo</p>
<p>ich verweise mal auf diesen Thread: <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1932903.html#1932903" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1932903.html#1932903</a></p>
<p>Da geht es um das Problem, dass ein GTK/Gtkmm Objekt nicht mehr als ein Event vom selben EventTyp haben kann. Was in meinem Fall ziemlich einschränkt.</p>
<p>meine Buttonklasse schaut grob so aus:</p>
<pre><code class="language-cpp">class Button
{
public:
    Button(...) // X,Y,Width,Height, usw.
private:
    bool releaseEvent(...); // Jeder Button soll einen bestimmten Effekt machen, wenn er angeklickt wird.
    // std::vector&lt;Funktionstyp&gt; m_releaseEventContainer; // Wird unten erklärt.
};

class Menu
{
public:
    Menu(...); // X,Y...
    /* hier wird ein button übergeben und ein weiterer 'releaseEvent' sollte sich an dem Button ankoppeln.
       geht nur leider nicht, da wie oben schon erwähnt ein GTK/Gtkmm Objekt nur ein Event vom selben EventTyp haben kann.
    */
    void addButtonItem(Button&amp; button); 
};
</code></pre>
<p>Meine Idee wäre jetzt einen 'Funktionscontainer' in die Klasse 'Button' zu implementieren. Nur habe ich gar keine Ahnung was für ein Typ so eine Funktion hat? Es sollte auch möglichst nicht eingeschränkt sein, da manche Funktionen zwei Parameter haben und manche drei,...</p>
<p>Kann mir wer helfen?</p>
<p>Danke im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271426/funktionscontainer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 12:13:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271426.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jul 2010 07:07:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 07:07:37 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>ich verweise mal auf diesen Thread: <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1932903.html#1932903" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1932903.html#1932903</a></p>
<p>Da geht es um das Problem, dass ein GTK/Gtkmm Objekt nicht mehr als ein Event vom selben EventTyp haben kann. Was in meinem Fall ziemlich einschränkt.</p>
<p>meine Buttonklasse schaut grob so aus:</p>
<pre><code class="language-cpp">class Button
{
public:
    Button(...) // X,Y,Width,Height, usw.
private:
    bool releaseEvent(...); // Jeder Button soll einen bestimmten Effekt machen, wenn er angeklickt wird.
    // std::vector&lt;Funktionstyp&gt; m_releaseEventContainer; // Wird unten erklärt.
};

class Menu
{
public:
    Menu(...); // X,Y...
    /* hier wird ein button übergeben und ein weiterer 'releaseEvent' sollte sich an dem Button ankoppeln.
       geht nur leider nicht, da wie oben schon erwähnt ein GTK/Gtkmm Objekt nur ein Event vom selben EventTyp haben kann.
    */
    void addButtonItem(Button&amp; button); 
};
</code></pre>
<p>Meine Idee wäre jetzt einen 'Funktionscontainer' in die Klasse 'Button' zu implementieren. Nur habe ich gar keine Ahnung was für ein Typ so eine Funktion hat? Es sollte auch möglichst nicht eingeschränkt sein, da manche Funktionen zwei Parameter haben und manche drei,...</p>
<p>Kann mir wer helfen?</p>
<p>Danke im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932907</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Wed, 28 Jul 2010 07:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 08:16:59 GMT]]></title><description><![CDATA[<p>Ehrlich gesagt habe ich keinen Plan, was du genau vor hast.</p>
<p>Wenn du einen Funktionszeiger hast, dann musst du dich auf die genauen<br />
Parameter festlegen. Du kannst ja schlecht einer Funktion mit 3 Parametern<br />
nur 2 übergeben.</p>
<p>Falls du nicht weißt, wie du Funktionszeiger in einen Container kriegst,<br />
hier mal ein Beispiel, sowohl mit normalen Funktionszeigern als auch<br />
mit Member-Funktionszeigern:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
class A{

public:

        int j;

        int multiply(int i){
                return i*j;
        }
        int add(int i){
                return i+j;
        }
};

int multiply(int i, int j){
        return i*j;
}

int add(int i, int j){
        return i+j;
}

typedef int (*foo)(int, int);
typedef int (A::*bar)(int);

int main() {
        std::vector&lt;foo&gt; vec;
        vec.push_back(&amp;multiply);
        vec.push_back(&amp;add);
        for(std::vector&lt;foo&gt;::const_iterator it = vec.begin(); it!=vec.end(); ++it){
                std::cout &lt;&lt; (*it)(5,7) &lt;&lt; std::endl;
        }
        A a1;
        a1.j = 5;
        A a2;
        a2.j = 3;
        std::vector&lt;bar&gt; vec2;
        vec2.push_back(&amp;A::multiply);
        vec2.push_back(&amp;A::add);
        for(std::vector&lt;bar&gt;::const_iterator it = vec2.begin(); it!=vec2.end(); ++it){
                std::cout &lt;&lt; (a1.**it)(7) &lt;&lt; std::endl;
                std::cout &lt;&lt; (a2.**it)(7) &lt;&lt; std::endl;
        }
        return 0;
}
</code></pre>
<p>Ich weiß nicht, ob dich das weiterbringt...<br />
Aber wenn du eine Schnittstelle haben möchtest, musst du sie auch definieren <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="😉"
    /><br />
Also brauchst du eine genaue Funktions-Spezifikation</p>
<p>EDIT: Achso: Du kannst natürlich alle zur verfügungstehenden Parameter an der<br />
Funktionszeiger übergeben. Dann kannst du ja Funktionen schreiben, die den<br />
Aufruf mit den passenden Parametern delegieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932924</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Wed, 28 Jul 2010 08:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 08:17:31 GMT]]></title><description><![CDATA[<p>Ich verstehe auch nicht, was Du willst. Das mag daran liegen, dass ich mich mit Gtk/mm nicht auskenne oder auch daran, dass Du eine sehr komische Terminologie verwendest.</p>
<p>&quot;dass ein GTK/Gtkmm Objekt nicht mehr als ein Event vom selben EventTyp haben kann&quot;</p>
<p>Was meinst Du damit?<br />
Wie &quot;hat&quot; ein Objekt denn ein &quot;Event&quot; bzw &quot;EventTyp&quot;?</p>
<p>Kannst Du Dein Problem ohne &quot;Event&quot;, &quot;EventTyp&quot; und &quot;GTK Objekt&quot; formulieren?</p>
<p>Was soll das für ein Container sein, wie willst Du ihn benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932929</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 28 Jul 2010 08:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 09:00:10 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>&quot;dass ein GTK/Gtkmm Objekt nicht mehr als ein Event vom selben EventTyp haben kann&quot;</p>
<p>Was meinst Du damit?<br />
Wie &quot;hat&quot; ein Objekt denn ein &quot;Event&quot; bzw &quot;EventTyp&quot;?</p>
</blockquote>
<p>blöde wörter benutze ich da aber mir fällt das beschreiben etwas schwer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
EventTyp: &quot;signal_release_event&quot;.<br />
(release)Event: die funktion die aufgerufen wird, wenn man auf ein GTK-Objekt ( was in meinem Fall der Button ist) klickt.</p>
<blockquote>
<p>Kannst Du Dein Problem ohne &quot;Event&quot;, &quot;EventTyp&quot; und &quot;GTK Objekt&quot; formulieren?</p>
</blockquote>
<pre><code class="language-cpp">class Button
{
public:
    Button(int x, int y, int width, int height);

    void addAnotherEventHandlerForReleaseEvent(functionType function);

private:
    bool eventHandlerForReleaseEvent(); // Ruft alle funktionen im functionContainer auf. *** 
    std::vector&lt;functionType&gt; functionContainer;
};
</code></pre>
<blockquote>
<p>Was soll das für ein Container sein, wie willst Du ihn benutzen?</p>
</blockquote>
<p>***</p>
<p>Das Problem ist dass man in GTK+ / Gtkmm an einem Widget(GTK Objekt) nur <strong>ein</strong> EventHandler(event) für ein ReleaseEvent(eventtyp) anbinden kann. ich bräuchte aber N EventHandler für das ReleaseEvent.</p>
<p>Irgendwie ist das für mich jetzt klarer geworden <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 />
Dann wäre meine eigentliche Frage beantwortet worden. Danke CSpille und krümelkacke.<br />
noch eine frage:<br />
Könnte man den functionType wirklich nicht flexibler machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932954</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Wed, 28 Jul 2010 09:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 09:04:08 GMT]]></title><description><![CDATA[<p>Wäre <code>std::tr1::function</code> (respektive <code>boost::function</code> ) etwas? Für komplette Signal/Slot-Systeme kannst du auch <code>boost::signals</code> verwenden...</p>
<p>Insbesondere mit <code>bind()</code> bist du nämlich schon <strong>sehr</strong> flexibel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932955</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 28 Jul 2010 09:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 09:09:08 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wäre <code>std::tr1::function</code> (respektive <code>boost::function</code> ) etwas?</p>
</blockquote>
<p>Nexus wie immer eine große Hilfe! <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/signals/tutorial.html#id1729727" rel="nofollow">http://www.boost.org/doc/libs/1_43_0/doc/html/signals/tutorial.html#id1729727</a></p>
<p>das hilft mir sehr! danke <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1932958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932958</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Wed, 28 Jul 2010 09:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 09:51:32 GMT]]></title><description><![CDATA[<p>gtkmm kommt, soweit ich weiß, mit seiner eigenen signal/slot Implementierung daher, welche <a href="http://libsigc.sourceforge.net/" rel="nofollow">ausgegliedert</a> wurde und separat nutzbar ist. Damit sollte es eigentlich auch gehen. Man kann scheinbar auch ein &quot;Signal&quot; mit mehreren &quot;Slots&quot; verbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932991</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 28 Jul 2010 09:51:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionscontainer? on Wed, 28 Jul 2010 12:26:03 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>gtkmm kommt, soweit ich weiß, mit seiner eigenen signal/slot Implementierung daher, welche <a href="http://libsigc.sourceforge.net/" rel="nofollow">ausgegliedert</a> wurde und separat nutzbar ist. Damit sollte es eigentlich auch gehen. Man kann scheinbar auch ein &quot;Signal&quot; mit mehreren &quot;Slots&quot; verbinden.</p>
</blockquote>
<p>Hab was gefunden. Danke krümelkacker: <a href="http://library.gnome.org/devel/gtk/stable/GtkWidget.html#GtkWidget-button-press-event" rel="nofollow">http://library.gnome.org/devel/gtk/stable/GtkWidget.html#GtkWidget-button-press-event</a></p>
<p>achtet auf den Satz:</p>
<blockquote>
<p>Returns :<br />
TRUE to stop other handlers from being invoked for the event. <strong>FALSE to propagate the event further.</strong></p>
</blockquote>
<p>That's it!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933081</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:26:03 GMT</pubDate></item></channel></rss>