<?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[function pointer auf Memberfunktion mit Argumenten]]></title><description><![CDATA[<p>Hi,<br />
Wie muss ich meinen Funktionzeiger definieren, dass folgendes funktioniert?</p>
<pre><code>class Test
{
public:
	void funktion_1( char c, const string&amp; str )
	{
	}
	void funktion_2( char c, const string&amp; str )
	{
	}

	void bar( /*function pointer */, char c, const string&amp; str )
	{
		// Nun will ich mit dem function pointer entweder funktion_1 oder funktion_2 aufrufen.
	}

	void foo()
	{
		bar( funktion_1, 'x', &quot;hallo welt&quot; );
		bar( funktion_2, 'y', &quot;nochmal&quot; );
	}
};

int main()
{
	Test t;
}
</code></pre>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327234/function-pointer-auf-memberfunktion-mit-argumenten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 13:10:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327234.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jul 2014 19:28:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Tue, 29 Jul 2014 19:28:11 GMT]]></title><description><![CDATA[<p>Hi,<br />
Wie muss ich meinen Funktionzeiger definieren, dass folgendes funktioniert?</p>
<pre><code>class Test
{
public:
	void funktion_1( char c, const string&amp; str )
	{
	}
	void funktion_2( char c, const string&amp; str )
	{
	}

	void bar( /*function pointer */, char c, const string&amp; str )
	{
		// Nun will ich mit dem function pointer entweder funktion_1 oder funktion_2 aufrufen.
	}

	void foo()
	{
		bar( funktion_1, 'x', &quot;hallo welt&quot; );
		bar( funktion_2, 'y', &quot;nochmal&quot; );
	}
};

int main()
{
	Test t;
}
</code></pre>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411150</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 29 Jul 2014 19:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Tue, 29 Jul 2014 19:34:45 GMT]]></title><description><![CDATA[<p>Mein Favorit:</p>
<pre><code>void bar(void (*funktion)( char c, const string&amp; str ), char c, const string&amp; str )
    {
        funktion(c, str);
    }
</code></pre>
<p>Alternative (halte ich für Obfuscation):</p>
<pre><code>typedef void (*VoidCharStringFunction)(char c, const string&amp; str);
void bar(VoidCharStringFunction funktion, char c, const string&amp; str )
    {
        funktion(c, str);
    }
</code></pre>
<p>Alternative (halte ich für Obfuscation):</p>
<pre><code>using VoidCharStringFunction = void (*)(char c, const string&amp; str);
void bar(VoidCharStringFunction funktion, char c, const string&amp; str )
    {
        funktion(c, str);
    }
</code></pre>
<p>Alternative (kostet Laufzeit, funktioniert dafür aber mit Lambdas und Objekten):</p>
<pre><code>void bar(std::function&lt;void(char, const string &amp;)&gt; funktion, char c, const string&amp; str )
    {
        funktion(c, str);
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411152</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Tue, 29 Jul 2014 19:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Tue, 29 Jul 2014 19:41:41 GMT]]></title><description><![CDATA[<pre><code>void bar(void funktion( char c, const string&amp; str ), char c, const string&amp; str )
    {
        funktion(c, str);
    }
</code></pre>
<p>Funktioniert auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411157</guid><dc:creator><![CDATA[Papa Schlumpf]]></dc:creator><pubDate>Tue, 29 Jul 2014 19:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Tue, 29 Jul 2014 19:48:28 GMT]]></title><description><![CDATA[<p>Achtung, die Methoden sind nicht statisch! Daher braucht man Methodenzeiger und nicht Funktionszeiger.</p>
<pre><code>class Test
{
public:
	void funktion_1(char c, const std::string&amp; str)
	{
	}
	void funktion_2(char c, const std::string&amp; str)
	{
	}

	void bar(void(Test::*funktion)(char, const std::string&amp;), char c, const std::string&amp; str)
	{
		// Nun will ich mit dem function pointer entweder funktion_1 oder funktion_2 aufrufen.
		(this-&gt;*funktion)(c, str);
	}

	void foo()
	{
		bar(&amp;Test::funktion_1, 'x', &quot;hallo welt&quot;);
		bar(&amp;Test::funktion_2, 'y', &quot;nochmal&quot;);
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411159</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Tue, 29 Jul 2014 19:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Tue, 29 Jul 2014 20:14:43 GMT]]></title><description><![CDATA[<p>Danke, das von asdflol hat funktioniert.</p>
<pre><code>(this-&gt;*funktion)
</code></pre>
<p>Darauf wäre ich nie gekommen:D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411164</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 29 Jul 2014 20:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to function pointer auf Memberfunktion mit Argumenten on Wed, 30 Jul 2014 11:58:44 GMT]]></title><description><![CDATA[<p>Das ist auch gar nicht so ganz einfach und gebräuchlich wie ich finde. Wenn ein problem schon abstrahiert wird, dann schlage ich auch gerne mal mit std::function + std::bind drauf ein.</p>
<p>Dann ist wenigstens der Aufruf wieder schön hübsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411251</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 30 Jul 2014 11:58:44 GMT</pubDate></item></channel></rss>