<?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[Funktionspointer und std::tr1::function]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe zwei Fragen zu Funktionspointern:</p>
<ol>
<li></li>
</ol>
<p>Funktionspointer auf Memberfunktionen sind grundsätzlich möglich, jedoch ist der Aufruf einer solchen Funktion anders. Ist es möglich, in einer queue von Funktionspointern (std::queue&lt;void (*)(std::ifstream)&gt;) sowohl Pointer auf normale Funktionen als auch Pointer auf Memberfunktionen zu speichern und aufzurufen?</p>
<ol start="2">
<li></li>
</ol>
<p>es gibt im TR1 das Template function. Ist dies einfach &quot;modernerer&quot; Funktionspointer (d.h. kann diese ersetzen) oder etwas völlig anderes? Ist dieses template möglicherweise in Bezug auf meine erste Frage hilfreich?</p>
<p>Danke schon im Voraus!</p>
<p>mfg<br />
mr x</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252571/funktionspointer-und-std-tr1-function</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 08:33:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252571.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Oct 2009 16:23:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 16:23:15 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe zwei Fragen zu Funktionspointern:</p>
<ol>
<li></li>
</ol>
<p>Funktionspointer auf Memberfunktionen sind grundsätzlich möglich, jedoch ist der Aufruf einer solchen Funktion anders. Ist es möglich, in einer queue von Funktionspointern (std::queue&lt;void (*)(std::ifstream)&gt;) sowohl Pointer auf normale Funktionen als auch Pointer auf Memberfunktionen zu speichern und aufzurufen?</p>
<ol start="2">
<li></li>
</ol>
<p>es gibt im TR1 das Template function. Ist dies einfach &quot;modernerer&quot; Funktionspointer (d.h. kann diese ersetzen) oder etwas völlig anderes? Ist dieses template möglicherweise in Bezug auf meine erste Frage hilfreich?</p>
<p>Danke schon im Voraus!</p>
<p>mfg<br />
mr x</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795888</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 21 Oct 2009 16:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 16:39:51 GMT]]></title><description><![CDATA[<p>Zu 1:<br />
So einfach geht das nicht. Ich weiß jetzt nicht ob es überhaupt geht, habe mich damit noch nicht beschäftigt. Wichtig ist für den Aufruf nicht-statischer Memberfunktionen, das du den this Zeiger benötigst. Ohne den geht nichts. Statische Memberfunktionen könntest du wahrscheinlich irgendwie umbiegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795902</guid><dc:creator><![CDATA[schmuessla]]></dc:creator><pubDate>Wed, 21 Oct 2009 16:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 16:49:44 GMT]]></title><description><![CDATA[<blockquote>
<p>So einfach geht das nicht.</p>
</blockquote>
<p>Das habe ich mir schon gedacht... <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="😉"
    /></p>
<blockquote>
<p>Statische Memberfunktionen könntest du wahrscheinlich irgendwie umbiegen.</p>
</blockquote>
<p>Die dürften kein Problem sein, da sie ja nicht auf ein bestimmtes Objekt der Klasse bezogen sind. Leider ist die Funktion bei mir nicht statisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795911</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 21 Oct 2009 16:49:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 16:56:39 GMT]]></title><description><![CDATA[<p>Wie gesagt, bei nicht-statischen Memberfunktionen benötigst du den this-Zeiger, ansonsten weiß man ja nicht für welches Objekt die Funktion ausgeführt werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795916</guid><dc:creator><![CDATA[schmuessla]]></dc:creator><pubDate>Wed, 21 Oct 2009 16:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 17:05:38 GMT]]></title><description><![CDATA[<p>Aber durch den this-Zeiger können sie allerdings nicht mehr mit normalen Funktionspointern gemischt werden (Aufruf der Funktion, auf den der Pointer zeigt und Deklaration muss gleich sein).</p>
<p>Meine Frage zielte mehr darauf ab, ob es vielleicht Zeiger auf Memberfunktionen bezogen auf ein festgelegtes Objekt gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795918</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 21 Oct 2009 17:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 17:10:33 GMT]]></title><description><![CDATA[<p>Hier ist ein kleines Beispiel, wie du Member- und freie Funktionen mit std::function unter einen Hut bringst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;tr1/functional&gt;

typedef std::tr1::function&lt;void(int)&gt; my_func_type; // dein funktionstyp

struct test
{
    void member_func(int v) { std::cout &lt;&lt; &quot;member_func: &quot; &lt;&lt; v &lt;&lt;  std::endl; }
};

void free_func(int v) { std::cout &lt;&lt; &quot;free_func: &quot; &lt;&lt; v &lt;&lt; std::endl; }

int main()
{
    // zeiger auf member function
    test t;
    my_func_type func1 = std::tr1::bind(&amp;test::member_func, t, std::tr1::placeholders::_1);

    // zeiger auf freie funktion
    my_func_type func2 = std::tr1::bind(&amp;free_func, std::tr1::placeholders::_1);

    // aufruf funktioniert für beide gleich
    func1(23);
    func2(42);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1795920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795920</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Wed, 21 Oct 2009 17:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 17:29:02 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Das funktioniert und hat zugleich meine Frage nach std::tr1::function geklärt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795923</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 21 Oct 2009 17:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 17:49:05 GMT]]></title><description><![CDATA[<p>Noch eine kleine Frage:</p>
<p>Was bedeutet &quot;std::tr1::placeholders::_1&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795934</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 21 Oct 2009 17:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 19:01:45 GMT]]></title><description><![CDATA[<p>Das <code>_1</code> repräsentiert das erste Argument. <code>bind()</code> erzeugt einen Funktor, bei dem die Platzhalter <code>_1</code> , <code>_2</code> etc. die eigentlichen Parameter darstellen. Beim &quot;Aufruf&quot; des <code>function</code> -Objekts werden die Argumente (im Beispiel 23 und 42) an die von <code>function</code> gespeicherte Funktion weitergeleitet.</p>
<p>Ausführlichere Erklärungen findest du bei <a href="http://www.boost.org/doc/libs/1_40_0/libs/bind/bind.html" rel="nofollow">Boost.Bind</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795961</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 21 Oct 2009 19:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer und std::tr1::function on Wed, 21 Oct 2009 20:00:17 GMT]]></title><description><![CDATA[<p>Noch ergänzend zu <code>tr1::function</code> :<br />
Der eigentliche Vorteil von function gegenüber einem gewöhnlichen Pointer auf eine Funktion ist, dass die Funktion nicht genau diesen Parameter und genau diesen Rückgabewert haben muss, sondern dass die besagten Werte lediglich in die Ausgangswerte konvertierbar sein müssen. Außerdem akzeptiert er dank Templates auch Funktoren als Parameter.<br />
Beispiel:</p>
<pre><code class="language-cpp">// Erste Funktion
int f(int c) {
	return c * c;
}

// Zweite Funktion
double d(float f) {
	return f * f;
}

// Funktor
struct c {
	int operator ()(int d) {
		return d + d;
	}
};

// Ruft Fkt.-Ptr. auf
void aufruf(int (*fptr)(int)) {
	fptr(34);
}

// Ruft Template auf
template &lt;typename T&gt;
void aufruf2(T t) {
	t(54);
}

// Ruft tr1::function auf
void aufruf3(std::tr1::function&lt;int (int)&gt; fkt) {
	fkt(43);
}

aufruf(f); // Prima!
aufruf(c()); // oh-oh! c kann nicht in int (*)(int) konvertiert werden
aufruf(d); // oh-oh! double (*)(float) kann nicht in int (*)(int) konvertiert werden

// Optionaler Tpl-Parameter zur Veranschaulichung
aufruf2&lt;int (int)&gt;(f); // Prima!
aufruf2&lt;c&gt;(c()); // Prima!
aufruf2&lt;double (float)&gt;(d); // Prima!

// Prima! Mit Konvertierungen
aufruf3(f);
aufruf3(c());
aufruf3(d);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1795993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795993</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 21 Oct 2009 20:00:17 GMT</pubDate></item></channel></rss>