<?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[Frage zu mem_fun_t und mem_fun_ref_t]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;algorithm&gt;
using namespace std;

class Klasse{
	private:
		int Wert;
	public:
		Klasse(int Wert):Wert(Wert){}

		int Schreibe(void){
			printf(&quot;%i \n&quot;, Wert);
			return Wert;
		}
};

int main (int argc,char** argv)
{
	Klasse* Array[] = {new Klasse(1),new Klasse(2),new Klasse(3)};

	for_each(Array,
			 Array+3,
			 mem_fun_ref_t&lt;int,Klasse&gt;(&amp;Klasse::Schreibe) // &lt;== geht nicht
			 );
    return 0;
}
</code></pre>
<p>Hallo,<br />
kann mir jemand genau erklären warum <strong>mem_fun_t</strong> geht und <strong>mem_fun_ref_t</strong> nicht?<br />
Es sollte doch (zumindest in diesem Fall) kein Unterschied machen ob eine Methode über einen Zeiger oder eine Referenz aufgerufen wird.<br />
Hier hab ich den Code von <strong>mem_fun_ref_t</strong> mitkopiert:</p>
<pre><code class="language-cpp">template &lt;class _Ret, class _Tp&gt;
class mem_fun_ref_t : public unary_function&lt;_Tp,_Ret&gt; 
{
	public:
		explicit mem_fun_ref_t (_Ret (_Tp::*__pf)()) : _M_f(__pf)
		{}
		_Ret operator()(_Tp&amp; __r) const 
		{ 
			return (__r.*_M_f)();
		}
	private:
		 _Ret (_Tp::*_M_f)();
};
</code></pre>
<p>Dankeschön</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226490/frage-zu-mem_fun_t-und-mem_fun_ref_t</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:59:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226490.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Nov 2008 01:26:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu mem_fun_t und mem_fun_ref_t on Sun, 02 Nov 2008 01:26:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;algorithm&gt;
using namespace std;

class Klasse{
	private:
		int Wert;
	public:
		Klasse(int Wert):Wert(Wert){}

		int Schreibe(void){
			printf(&quot;%i \n&quot;, Wert);
			return Wert;
		}
};

int main (int argc,char** argv)
{
	Klasse* Array[] = {new Klasse(1),new Klasse(2),new Klasse(3)};

	for_each(Array,
			 Array+3,
			 mem_fun_ref_t&lt;int,Klasse&gt;(&amp;Klasse::Schreibe) // &lt;== geht nicht
			 );
    return 0;
}
</code></pre>
<p>Hallo,<br />
kann mir jemand genau erklären warum <strong>mem_fun_t</strong> geht und <strong>mem_fun_ref_t</strong> nicht?<br />
Es sollte doch (zumindest in diesem Fall) kein Unterschied machen ob eine Methode über einen Zeiger oder eine Referenz aufgerufen wird.<br />
Hier hab ich den Code von <strong>mem_fun_ref_t</strong> mitkopiert:</p>
<pre><code class="language-cpp">template &lt;class _Ret, class _Tp&gt;
class mem_fun_ref_t : public unary_function&lt;_Tp,_Ret&gt; 
{
	public:
		explicit mem_fun_ref_t (_Ret (_Tp::*__pf)()) : _M_f(__pf)
		{}
		_Ret operator()(_Tp&amp; __r) const 
		{ 
			return (__r.*_M_f)();
		}
	private:
		 _Ret (_Tp::*_M_f)();
};
</code></pre>
<p>Dankeschön</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608797</guid><dc:creator><![CDATA[Programmierer]]></dc:creator><pubDate>Sun, 02 Nov 2008 01:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu mem_fun_t und mem_fun_ref_t on Sun, 02 Nov 2008 05:42:20 GMT]]></title><description><![CDATA[<p>Programmierer schrieb:</p>
<blockquote>
<p>kann mir jemand genau erklären warum <strong>mem_fun_t</strong> geht und <strong>mem_fun_ref_t</strong> nicht?</p>
</blockquote>
<p>Weil du da ein Array von Zeigern hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608817</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 02 Nov 2008 05:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu mem_fun_t und mem_fun_ref_t on Sun, 02 Nov 2008 17:42:06 GMT]]></title><description><![CDATA[<p>Warum geht dann das?</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;functional&gt;
using namespace std;

class Klasse
{
	private:
		int Wert;
	public:		
		Klasse(int Wert):Wert(Wert)
		{}
		int Methode(void)
		{
			return 0;
		}
};

int main(int argc,char** d)
{
	Klasse* Array[] = {new Klasse(1),new Klasse(2)};

	mem_fun_ref_t &lt;int,Klasse&gt; Obj(&amp;Klasse::Methode);

	Obj(*Array[0]);

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1609044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609044</guid><dc:creator><![CDATA[Programmierer]]></dc:creator><pubDate>Sun, 02 Nov 2008 17:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu mem_fun_t und mem_fun_ref_t on Sun, 02 Nov 2008 18:27:41 GMT]]></title><description><![CDATA[<p>Programmierer schrieb:</p>
<blockquote>
<p>...<br />
kann mir jemand genau erklären warum ... <strong>mem_fun_ref_t</strong> nicht geht?...</p>
</blockquote>
<p>Weil's keine Beine hat.</p>
<p>Merke: &quot;Geht nicht&quot; ist keine Fehlerbeschreibung.<br />
und Merke2: Der Compiler versucht üblicherweise zu sagen, was ihm missfällt.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609060</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 02 Nov 2008 18:27:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu mem_fun_t und mem_fun_ref_t on Sun, 02 Nov 2008 19:23:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;algorithm&gt; 
#include &lt;functional&gt; 
using namespace std; 

class Klasse 
{ 
    private: 
        int Wert; 
    public:        
        Klasse(int Wert):Wert(Wert) 
        {} 
        int Methode(void) 
        { 
            return 0; 
        } 
}; 

int main(int argc,char** d) 
{ 
    Klasse* Array[] = {new Klasse(1),new Klasse(2)}; 

    mem_fun_ref_t&lt;int, Klasse&gt; ObjRef(&amp;Klasse::Methode); 
    mem_fun_t&lt;int, Klasse&gt; ObjPtr(&amp;Klasse::Methode);

    ObjRef(*Array[0]); // &lt;- Referenz wird übergeben!
    ObjPtr(Array[0]);  // &lt;- Zeiger wird übergeben!

    return 0; 
}
</code></pre>
<p>Ist das so schwer zu verstehen?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609087</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 02 Nov 2008 19:23:58 GMT</pubDate></item></channel></rss>