<?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[Problematische static Methode]]></title><description><![CDATA[<p>Hi Volks!</p>
<p>Folgendes Problem:</p>
<p>Ich hab' eine Klasse und möchte</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

class foo {

    public:

        typedef void ( *event_handler_fp )( foo *foo_instance );

    private:

        static std::vector&lt; event_handler_fp &gt; event_handler_map;
        unsigned int num_event_handlers;

    public:

        foo( ) : num_event_handlers( 0 ) {
        }

        void add_event_handler( event_handler_fp event_handler ) {
            event_handler_map.push_back( menu_handler );
            ++num_event_handlers;           
        }

        void bar( ) {
            std::cout &lt;&lt; &quot;foo::bar( )&quot; &lt;&lt; std::endl;
        }

        static void event_loop( ) {
            unsigned int event;
            do {
                event = wait_event( );
                event_handler_map.at( event )( /* hier */ );
            } while( event );
        }
};
</code></pre>
<p>sinngemäß einen this-Zeiger übergeben, welcher jedoch logischerweise in einer static-Methode nicht existiert, um in den</p>
<pre><code class="language-cpp">void bar_event( foo *foo_instance )  // event-Handlern
{
    cout &lt;&lt; &quot;bar_event( )&quot; &lt;&lt; endl;
    foo_instance-&gt;bar( );            // foo::bar( )
}
</code></pre>
<p>aufrufen zu können.</p>
<p>Hat jemand 'ne Idee, wie man soetwas lösen könnte?</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150112/problematische-static-methode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 12:03:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150112.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jun 2006 09:44:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problematische static Methode on Tue, 13 Jun 2006 09:44:09 GMT]]></title><description><![CDATA[<p>Hi Volks!</p>
<p>Folgendes Problem:</p>
<p>Ich hab' eine Klasse und möchte</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

class foo {

    public:

        typedef void ( *event_handler_fp )( foo *foo_instance );

    private:

        static std::vector&lt; event_handler_fp &gt; event_handler_map;
        unsigned int num_event_handlers;

    public:

        foo( ) : num_event_handlers( 0 ) {
        }

        void add_event_handler( event_handler_fp event_handler ) {
            event_handler_map.push_back( menu_handler );
            ++num_event_handlers;           
        }

        void bar( ) {
            std::cout &lt;&lt; &quot;foo::bar( )&quot; &lt;&lt; std::endl;
        }

        static void event_loop( ) {
            unsigned int event;
            do {
                event = wait_event( );
                event_handler_map.at( event )( /* hier */ );
            } while( event );
        }
};
</code></pre>
<p>sinngemäß einen this-Zeiger übergeben, welcher jedoch logischerweise in einer static-Methode nicht existiert, um in den</p>
<pre><code class="language-cpp">void bar_event( foo *foo_instance )  // event-Handlern
{
    cout &lt;&lt; &quot;bar_event( )&quot; &lt;&lt; endl;
    foo_instance-&gt;bar( );            // foo::bar( )
}
</code></pre>
<p>aufrufen zu können.</p>
<p>Hat jemand 'ne Idee, wie man soetwas lösen könnte?</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076767</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jun 2006 09:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problematische static Methode on Tue, 13 Jun 2006 09:59:01 GMT]]></title><description><![CDATA[<p>Ich glaube da kann man was wesentliches nicht lesen... (ein Satz versteckt sich da)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076776</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Tue, 13 Jun 2006 09:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problematische static Methode on Tue, 13 Jun 2006 10:10:21 GMT]]></title><description><![CDATA[<p>Ne, meine Kommentare sind Bestandteil des Satzes:</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Ich hab' eine Klasse und möchte <strong>hier</strong> sinngemäß einen this-Zeiger übergeben, welcher jedoch logischerweise in einer static-Methode nicht existiert, um in den <strong>event-Handlern foo::bar( )</strong> aufrufen zu können.</p>
<p>Hat jemand 'ne Idee, wie man soetwas lösen könnte?</p>
</blockquote>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076782</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jun 2006 10:10:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problematische static Methode on Tue, 13 Jun 2006 10:39:20 GMT]]></title><description><![CDATA[<p>Übergib doch den Zeiger den Du dem Event-Handler übergeben willst auch der Funktion event_loop?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076796</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 13 Jun 2006 10:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problematische static Methode on Tue, 13 Jun 2006 10:56:58 GMT]]></title><description><![CDATA[<p>@LordJaxtom: Danke, daß du beim Rätseln behilflich bist! So einfach isses aber nicht, da ich die Signatur von event_loop() nicht verändern kann und sie auch nicht selbst aufrufe.</p>
<p>Hab' mir aber folgendes überlegt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

class foo {

    public:

        typedef void ( *event_handler_fp )( foo *foo_instance );

    private:
// hier &gt;--
        struct event_handler_data {
            foo *foo_instance;
            event_handler_fp event_handler;
        };  
// --------
//      static std::vector&lt; event_handler_fp &gt; event_handler_map;

// hier &gt;--
        static std::vector&lt; /* !! */ event_handler_data /* !! */ &gt; event_handler_map;
// --------

        unsigned int num_event_handlers;

    public:

        foo( ) : num_event_handlers( 0 ) {
        }

        void add_event_handler( event_handler_fp event_handler ) {
// hier &gt;--
            event_handler_data ehd;
            ehd.foo = this;
            ehd.event_handler = event_handler;
            event_handler_map.push_back( ehd );
// --------
            ++num_event_handlers;          
        }

        void bar( ) {
            std::cout &lt;&lt; &quot;foo::bar( )&quot; &lt;&lt; std::endl;
        }

        static void event_loop( ) {
            unsigned int event;
            do {
                event = wait_event( );
// hier &gt;--
                event_handler_map.at( event ).event_handler( 
                    event_handler_map.at( event ).foo
                );
// --------
            } while( event );
        }
};
</code></pre>
<p>Fällt jemandem eine elegantere Lösung ein?</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076808</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jun 2006 10:56:58 GMT</pubDate></item></channel></rss>