<?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[Funktionszeiger auf Member, nicht static]]></title><description><![CDATA[<p>Auf der Suche nach einer schönen und allgemeinen Lösung für das &quot;Funktionszeiger auf Member&quot;-Problem habe ich nur die beiden Workarounds mit static member und wrapper gefunden. Ich möchte das ganze aber für jede Memberfunktion(mit entsprechender Signatur) machen können. Jetzt habe ich erstmal sowas gebastelt:</p>
<pre><code class="language-cpp">//Beispielklasse
class CPlayer {
public:
	void move() {}
};

//Funktion und Taste verbinden(jetzt einfach Global, aber später in einer anderen Klasse)
template&lt;typename T&gt;
void AssignKeyToMemberFunction(int Key, T* const This, void (T::*const pToMember)(void)) {
	//...
	(This-&gt;*pToMember)();//Wie kann ich das zwischenspeichern und später aufrufen?
}

int main() {
	CPlayer PlayerOne;
	int Key=VK_LEFT;
	AssignKeyToMemberFunction&lt;CPlayer&gt;(Key, &amp;PlayerOne, &amp;CPlayer::move);
}
</code></pre>
<p>Durch das Template decke ich alle Klassen ab.<br />
Die Memberfunktionen sind auf die Signatur void foo(void)() beschränkt, ist aber nicht so wild.</p>
<p>Mir fehlt quasi nurnoch das Abspeichern des Zeigers, da hakt es aber.<br />
Wenn ich es als void* speicher kenne ich den Typ nicht mehr und kann auch kein &quot;-&gt;&quot; verwenden. Und den Typ selber kann ich mir auch nicht abspeichern(oder doch?)<br />
Jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279975/funktionszeiger-auf-member-nicht-static</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 07:09:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279975.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Jan 2011 09:26:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:26:58 GMT]]></title><description><![CDATA[<p>Auf der Suche nach einer schönen und allgemeinen Lösung für das &quot;Funktionszeiger auf Member&quot;-Problem habe ich nur die beiden Workarounds mit static member und wrapper gefunden. Ich möchte das ganze aber für jede Memberfunktion(mit entsprechender Signatur) machen können. Jetzt habe ich erstmal sowas gebastelt:</p>
<pre><code class="language-cpp">//Beispielklasse
class CPlayer {
public:
	void move() {}
};

//Funktion und Taste verbinden(jetzt einfach Global, aber später in einer anderen Klasse)
template&lt;typename T&gt;
void AssignKeyToMemberFunction(int Key, T* const This, void (T::*const pToMember)(void)) {
	//...
	(This-&gt;*pToMember)();//Wie kann ich das zwischenspeichern und später aufrufen?
}

int main() {
	CPlayer PlayerOne;
	int Key=VK_LEFT;
	AssignKeyToMemberFunction&lt;CPlayer&gt;(Key, &amp;PlayerOne, &amp;CPlayer::move);
}
</code></pre>
<p>Durch das Template decke ich alle Klassen ab.<br />
Die Memberfunktionen sind auf die Signatur void foo(void)() beschränkt, ist aber nicht so wild.</p>
<p>Mir fehlt quasi nurnoch das Abspeichern des Zeigers, da hakt es aber.<br />
Wenn ich es als void* speicher kenne ich den Typ nicht mehr und kann auch kein &quot;-&gt;&quot; verwenden. Und den Typ selber kann ich mir auch nicht abspeichern(oder doch?)<br />
Jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003466</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:35:17 GMT]]></title><description><![CDATA[<p><code>boost::bind</code> + <code>boost::function</code></p>
<pre><code class="language-cpp">struct Some
{
   R doIt(T1 p1, T2 p2){ ... }
};

//...

Some some;
boost::function&lt;R (T1, T2)&gt; functor = boost::bind(&amp;Some::doIt, &amp;some, _1, _2);
functor(bla, blub); // some.doIt(bla, blub)
</code></pre>
<p>PS: Evtl. unterstützt Dein Compiler auch schon tr1. Dann brauchst Du nichtmal boost dafür. Zu finden ist das Zeugs im Header <code>&lt;functional&gt;</code> oder <code>&lt;tr1/functional&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003470</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:33:20 GMT]]></title><description><![CDATA[<p>Willst du da zum üben was selber basteln oder kennst du einfach die Binder aus <code>&lt;functional&gt;</code> oder boost nicht ( <code>std::mem_fun, boost::bind, std::bind</code> )?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003471</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:41:34 GMT]]></title><description><![CDATA[<p>Ich habe bei mir nicht mit <code>boost::function</code> sondern mit <code>std::function</code> gearbeitet, weshalb ich gernen wissen will, ob letzteres schon zum Standard gehört oder nur &quot;tr&quot;-like vorhanden ist:</p>
<pre><code class="language-cpp">std::map&lt;std::string, std::function&lt;void(boostOptions::variable_value)&gt;&gt; functors;
</code></pre>
<p>Hierbei habe ich eine Map mit Strings als Keys auf Funktionspointer hergenommen, die ich dynamisch über Prädikate als Lamda-Expressions an eine Funktion übergebe, die diese speichert bzw. verwaltet :p</p>
<p>// EDIT: Bei mir werden Funktionen der Form <code>void foo(boost::program_options::variable_value);</code> gespeichert, was jetzt meinen Gebrauch erklärt <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003473</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:49:41 GMT]]></title><description><![CDATA[<p>von boost::bind hab ich schon was gehört, aber noch nix damit gemacht.</p>
<p>Die &lt;functional&gt; header hab ich grad versucht einzubinden(erfolgreich).<br />
Müsste ich mir mal näher ansehen, allerdings bin ich immernoch an einer &quot;zufuß&quot; Lösung interessiert. Ich würde es gerne zur Übung und besserem verständnis selbst schreiben.</p>
<p>Donksche!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003482</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:49:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 09:52:30 GMT]]></title><description><![CDATA[<p><a href="http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx" rel="nofollow">Hier</a> gibt es eine mögliche Lösung mit Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003485</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 10:08:52 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p><a href="http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx" rel="nofollow">Hier</a> gibt es eine mögliche Lösung mit Beispiel.</p>
</blockquote>
<p>Yes! Genau das was ich gesucht habe, danke.<br />
Jetzt mal nachforschen was delegate so alles kann <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/2003492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003492</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Fri, 07 Jan 2011 10:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger auf Member, nicht static on Fri, 07 Jan 2011 14:10:37 GMT]]></title><description><![CDATA[<p>Hehe, genial!<br />
Stimmt der Kommentar von me65535 in dem verlinkten Artikel? Also darf man laut Standard die Stub-Zeiger vergleichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003666</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 07 Jan 2011 14:10:37 GMT</pubDate></item></channel></rss>