<?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[alternative zu funktionszeiger]]></title><description><![CDATA[<p>hallo</p>
<p>ich habe aktuell etwa so eine situation:</p>
<pre><code>typedef unsigned datatype;
struct myclass
{
    datatype const* ptr; // zeiger auf einen datenbereich
    datatype const&amp; normal_getter(int, int) const;
    datatype const&amp; special_getter(int, int) const;
    datatype some_operation(/* ... */, datatype (*getter)(int, int) = &amp;normal_getter) const
    {
        // ne menge code
    }
};
</code></pre>
<p>ich möchte schlussendlich dass ich some_operation mit beiden varianten von gettern aufrufen kann, c++ erlaubt mir aber keine funkionszeiger auf methoden zu machen. wie würdet ihr dieses problem lösen?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320414/alternative-zu-funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:46:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320414.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Sep 2013 10:18:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:18:15 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>ich habe aktuell etwa so eine situation:</p>
<pre><code>typedef unsigned datatype;
struct myclass
{
    datatype const* ptr; // zeiger auf einen datenbereich
    datatype const&amp; normal_getter(int, int) const;
    datatype const&amp; special_getter(int, int) const;
    datatype some_operation(/* ... */, datatype (*getter)(int, int) = &amp;normal_getter) const
    {
        // ne menge code
    }
};
</code></pre>
<p>ich möchte schlussendlich dass ich some_operation mit beiden varianten von gettern aufrufen kann, c++ erlaubt mir aber keine funkionszeiger auf methoden zu machen. wie würdet ihr dieses problem lösen?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355941</guid><dc:creator><![CDATA[doktor banane]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:23:29 GMT]]></title><description><![CDATA[<p>Doch, das ist möglich. Mit Memberfunktionszeigern.<br />
<a href="http://www.parashift.com/c++-faq/pointers-to-members.html" rel="nofollow">http://www.parashift.com/c++-faq/pointers-to-members.html</a></p>
<p>Ich könnte mir aber vorstellen, dass das Gesamtproblem eventuell eine viel bessere Lösung hat. <strong>Was</strong> soll hier denn erreicht werden und <strong>warum</strong>? Beschreib als Antwort auf diese Frage nicht deinen Plan mit den Funktionszeigern! Das wäre das <strong>Wie</strong> und das geht bestimmt besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355943</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:25:39 GMT]]></title><description><![CDATA[<p>doktor banane schrieb:</p>
<blockquote>
<p>c++ erlaubt mir aber keine funkionszeiger auf methoden zu machen.</p>
</blockquote>
<p>Wieso nicht? Sie heißen dann Methodenzeiger ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355944</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:34:29 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>doktor banane schrieb:</p>
<blockquote>
<p>c++ erlaubt mir aber keine funkionszeiger auf methoden zu machen.</p>
</blockquote>
<p>Wieso nicht? Sie heißen dann Methodenzeiger ...</p>
</blockquote>
<p>Und sind keine Funktionszeiger (nicht mal Zeiger). Die Aussage ist schon richtig, nur unvollständig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355945</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:41:50 GMT]]></title><description><![CDATA[<p>Warum nicht einfach std::function?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355947</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 10:45:37 GMT]]></title><description><![CDATA[<p>das mit den zeigern auf methoden scheint aber nur für statische methoden zu funktionieren.</p>
<pre><code>typedef unsigned datatype;
struct myclass
{
    datatype const* ptr; // zeiger auf einen datenbereich
    datatype const&amp; normal_getter(int, int) const;
    datatype const&amp; special_getter(int, int) const;
    datatype some_operation1(datatype (myclass::* getter)(int, int) = &amp;normal_getter) const; //error: ISO C++ forbids taking the address of a bound member function to form a pointer to member function.
    datatype some_operation2(datatype (myclass::* getter)(int, int) = &amp;(myclass::normal_getter)) const; //error: invalid use of non-static member function ‘const datatype&amp; myclass::normal_getter(int, int) const’
};
int main()
{
}
</code></pre>
<p>mein gesamtproblem:<br />
mit meiner klasse habe ich zwei zeiger, die auf speicher auf dem heap zeigen (beide selbe grösse). dabei ist der eine speicher immer eine leicht veränderte version des anderen speichers. welcher speicher gerade der neuste ist, ist auch in der klasse gespeichert. nun möchte ich z.b. mal die funktion some_operation aufrufen. da soll es aber mehrere möglichkeiten geben, z.b. dass man auf die letzte version zugreift, dass man auf eine gespiegelte version zugreift (was ja alles mit verschiedenen gettern gelöst ist), das kriege ich aber nicht hin irgendwie.</p>
<p>btw.: ich bin noch nicht so geübt usw. bzgl. c++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355948</guid><dc:creator><![CDATA[doktor banane]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 12:00:12 GMT]]></title><description><![CDATA[<p>doktor banane schrieb:</p>
<blockquote>
<p>das mit den zeigern auf methoden scheint aber nur für statische methoden zu funktionieren.</p>
</blockquote>
<p>→</p>
<pre><code>datatype some_operation1(datatype const&amp; (myclass::* getter)(int, int) const = &amp;myclass::normal_getter) const;
</code></pre>
<p>Edit:<br />
Das ist aber iwie fragwürdig. Der Benutzer kann/soll keine eigenen getter definieren, da sie Teil der struct sind. Warum dann überhaupt Zeiger auf die vordefinierten, struct-internen Getter übergeben und nicht einfach mehrere Methoden anbieten und die ganzen Details verbergen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355956</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Sep 2013 12:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 13:03:46 GMT]]></title><description><![CDATA[<p>lol, ich weiss nicht ob das ein compiler-bug ist aber auf jeden fall habe ich festgestellt, dass die klammern beim default-parameter (wenn man sie um den auflösungsoperator :: setzt, der sowieso stärker bindet als der dereferenzierungsoperator &amp; und somit keinen semantischen unterschied machen dürfte) das verhalten verändern:</p>
<p>ohne klammern, kompiliert einwandfrei:<br />
<a href="http://ideone.com/cLOsw7" rel="nofollow">http://ideone.com/cLOsw7</a></p>
<p>mit klammern, fehler mit den nicht-statischen methoden bla bla:<br />
<a href="http://ideone.com/Ta1ZxO" rel="nofollow">http://ideone.com/Ta1ZxO</a></p>
<p>an alle, danke für die hilfe (:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355987</guid><dc:creator><![CDATA[doktor banane]]></dc:creator><pubDate>Fri, 27 Sep 2013 13:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 13:05:36 GMT]]></title><description><![CDATA[<p>nachtrag:</p>
<p>mir ist natürlich schon aufgefallen, dass µ in seinem beitrag primär den rückgabetyp des methodenzeigers gefixt hat, jedoch war das in meinem echten projekt stets richtig (da es dort keine referenz ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355988</guid><dc:creator><![CDATA[doktor banane]]></dc:creator><pubDate>Fri, 27 Sep 2013 13:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:04:04 GMT]]></title><description><![CDATA[<pre><code>datatype some_operation1(datatype const&amp; (myclass::* getter)(int, int) const = &amp;myclass::normal_getter) const;
</code></pre>
<p>Macht das überhaupt Sinn? Wo issn da der <strong>this</strong>.<br />
Kanns Methodenzeiger überhaupt Default-Werte geben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356018</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:08:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Kanns Methodenzeiger überhaupt Default-Werte geben</p>
</blockquote>
<p>Du kannst ausnahmslos jedem Funktionsparameter, der auch als Funktionsparameter 'funktioniert' (also kompiliert usw.), default-Argumente geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356019</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:19:34 GMT]]></title><description><![CDATA[<p>Jau, aber eben nur statische methoden ... oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356021</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:22:34 GMT]]></title><description><![CDATA[<p>ScottZhang schrieb:</p>
<blockquote>
<p>Jau, aber eben nur statische methoden ... oder?</p>
</blockquote>
<p>Was genau ist deine Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356022</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:29:32 GMT]]></title><description><![CDATA[<p>ScottZhang schrieb:</p>
<blockquote>
<pre><code>datatype some_operation1(datatype const&amp; (myclass::* getter)(int, int) const = &amp;myclass::normal_getter) const;
</code></pre>
<p>Macht das überhaupt Sinn? Wo issn da der <strong>this</strong>.</p>
</blockquote>
<p>Du weißt schon, dass man Memberzeigern so einen Wert gibt:</p>
<pre><code>Ret (Class::*ptr) (Args...) = &amp;Class::foo;
</code></pre>
<p>Und sie so aufruft:</p>
<pre><code>(someObjectOfTypeClass.*ptr)(Arguments...);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2356023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356023</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:27:06 GMT]]></title><description><![CDATA[<p>Also meine Frage ist nach dem Sinn, einem Methodenzeiger default-wert zu geben zu wollen. Denn eine nicht-statische Methode ist an ein Objekt gebunden (this) und das muss ersteinmal existieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356024</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:27:06 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:29:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Denn eine nicht-statische Methode ist an ein Objekt gebunden (this) und das muss ersteinmal existieren.</p>
</blockquote>
<p>Nein, eine nicht-statische Memberfunktion kann auch ohne Objekt existieren. Sie kann nur nicht ohne Objekt aufgerufen werden (kann man theoretisch, macht man nicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2356026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356026</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to alternative zu funktionszeiger on Fri, 27 Sep 2013 15:38:27 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>ScottZhang schrieb:</p>
<blockquote>
<pre><code>datatype some_operation1(datatype const&amp; (myclass::* getter)(int, int) const = &amp;myclass::normal_getter) const;
</code></pre>
<p>Macht das überhaupt Sinn? Wo issn da der <strong>this</strong>.</p>
</blockquote>
<p>Du weißt schon, dass man Memberzeigern so einen Wert gibt:</p>
<pre><code>Ret (Class::*ptr) (Args...) = &amp;Class::foo;
</code></pre>
<p>Und sie so aufruft:</p>
<pre><code>(someObjectOfTypeClass.*ptr)(Arguments...);
</code></pre>
</blockquote>
<p>Ok das wusste ich nicht, ich habe die Methodenzeiger noch nie benutzt.<br />
Danke.</p>
<p>Edit: Und danke an Sone.</p>
<p>Edit2: Das ne Methode ohne obj existiert war mir schon klar. Mir war nur nicht ganz klar was der Thread Ersteller wollte <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/2356027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2356027</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 27 Sep 2013 15:38:27 GMT</pubDate></item></channel></rss>