<?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[Pointer auf Memberfunktionen]]></title><description><![CDATA[<p>Hi ich bin da auf ein merkwürdiges Problem gestoßen.<br />
Es gibt ja Pointer auf Funktionen, mit denen ich die Funktionen auch ausführen kann.<br />
Das geht aber irgendwie nur mit globalen Funktionen und nicht mit Memberfunkionen.<br />
Also ungefähr so</p>
<pre><code class="language-cpp">class CKlasse
{
public:
    bool m_Foo(int i)
    {
        return(i&gt;0); //Nur zur demo
    }
};

bool g_Foo(int i)
{
    return(i&lt;0); //Auch nur Demo
}

int main()
{
    bool (*p_Foo)(int); //Pointer auf Foo
    p_Foo=g_Foo; //Zuweisung klappt
    cout&lt;&lt;(*p_Foo)(3)&lt;&lt;endl; //Benutzen klappt auch
    //Aber wie geht das mit Memberfunktionen?
    //1. Variante
    CKlasse c;
    p_Foo=c.m_foo; //geht nicht
    //2. Variante
    //m_Foo als static -&gt; geht nicht weil ich damit auf Membervariablen
    //zugreifen können muss
    ...
</code></pre>
<p>Ich dachte noch an eine 3. Variante mit einer globalen inline Funktion, deren Pointer benutzt wird und die m_Foo aufruft. Damit hab ich aber das Problem dass die CKlasse-Instanz nicht global sein darf, dafür hab ich meine Gründe</p>
<p>Wie kann ich das Problem lösen?<br />
Hat jemand einen oder mehrere Vorschläge?<br />
Ich bin dankbar für jede Hilfe! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200028/pointer-auf-memberfunktionen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 05:30:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200028.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Dec 2007 21:04:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer auf Memberfunktionen on Sun, 09 Dec 2007 21:04:54 GMT]]></title><description><![CDATA[<p>Hi ich bin da auf ein merkwürdiges Problem gestoßen.<br />
Es gibt ja Pointer auf Funktionen, mit denen ich die Funktionen auch ausführen kann.<br />
Das geht aber irgendwie nur mit globalen Funktionen und nicht mit Memberfunkionen.<br />
Also ungefähr so</p>
<pre><code class="language-cpp">class CKlasse
{
public:
    bool m_Foo(int i)
    {
        return(i&gt;0); //Nur zur demo
    }
};

bool g_Foo(int i)
{
    return(i&lt;0); //Auch nur Demo
}

int main()
{
    bool (*p_Foo)(int); //Pointer auf Foo
    p_Foo=g_Foo; //Zuweisung klappt
    cout&lt;&lt;(*p_Foo)(3)&lt;&lt;endl; //Benutzen klappt auch
    //Aber wie geht das mit Memberfunktionen?
    //1. Variante
    CKlasse c;
    p_Foo=c.m_foo; //geht nicht
    //2. Variante
    //m_Foo als static -&gt; geht nicht weil ich damit auf Membervariablen
    //zugreifen können muss
    ...
</code></pre>
<p>Ich dachte noch an eine 3. Variante mit einer globalen inline Funktion, deren Pointer benutzt wird und die m_Foo aufruft. Damit hab ich aber das Problem dass die CKlasse-Instanz nicht global sein darf, dafür hab ich meine Gründe</p>
<p>Wie kann ich das Problem lösen?<br />
Hat jemand einen oder mehrere Vorschläge?<br />
Ich bin dankbar für jede Hilfe! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417823</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Sun, 09 Dec 2007 21:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Memberfunktionen on Sun, 09 Dec 2007 21:16:35 GMT]]></title><description><![CDATA[<p>Das haben wir hier mittlerweile fast wöchentlich :xmas2: Aber nuja ^^<br />
Aja geiler Stil ne Memberfunktion per m_ zu kennzeichnen ^^</p>
<pre><code class="language-cpp">struct foo
{
    void bar() { std::cout &lt;&lt; &quot;foo() function called&quot; &lt;&lt; std::endl; }
    typedef void(foo::*fnPtr)();
};

int main()
{
    foo::fnPtr ptr(&amp;foo::bar);
    foo inst;
    (inst.*ptr)();
}
</code></pre>
<p>wäre es, vereinfacht dargestellt ... achja, static Memberfunktionen lassen sich (fast) wie globale Funktionen behandeln.</p>
<pre><code class="language-cpp">template &lt;class obj, typename _Result, typename _Param1&gt;
struct mem_fn_ptr
{
    mem_fn_ptr(obj const&amp; instance, fnPtr func) 
        : m_obj(instance), m_func(func)
    {} 

    _Result operator()(_Param1 const&amp; param) { return (m_obj.*m_func)(param); }
private:
    obj const&amp; m_obj;
    typedef _Result (obj::*fnPtr)(_Param1 const&amp;);   
    fnPtr m_func;
};

class foo
{
    bool bar(std::istream const&amp; stream) { return !!stream; }
};

int main()
{
    foo inst;
    mem_fn_ptr&lt;foo, bool, std::istream&gt;(inst, &amp;foo::bar)(std::cin);
}
</code></pre>
<p>... wobei die Klasse foo jetzt natürlich nur ein Beispiel ist und in dem Fall nur kontrolliert, ob der übergebene istream ein fail|bad-bit gesetzt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417829</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 09 Dec 2007 21:16:35 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Memberfunktionen on Mon, 10 Dec 2007 00:16:59 GMT]]></title><description><![CDATA[<p>Es gibt hier auch ne FAQ, wo sowas drin steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417878</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Mon, 10 Dec 2007 00:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Memberfunktionen on Mon, 10 Dec 2007 08:38:59 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Das haben wir hier mittlerweile fast wöchentlich :xmas2:</p>
</blockquote>
<p>Dafür hab ich den Eindruck dass die &quot;meine konsole verschwindet&quot; fragen allmählich zurückgehen. Kann doch nur positiv sein wenn die Leute sich mehr auf die wirklichen C++-Problemchen stürzen <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="😉"
    /> Und spätestens wenn die Frage in 200 verschiedenen Versionen aufgetaucht ist, wird sie auch nurnoch einmal in 2 Monaten kommen und das nächste Thema ist mit dem Dauer-Bombardement dran <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="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417935</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 10 Dec 2007 08:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Memberfunktionen on Mon, 10 Dec 2007 17:07:44 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Und frohe Weihnachten&quot; :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418271</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Mon, 10 Dec 2007 17:07:44 GMT</pubDate></item></channel></rss>