<?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[bind2nd und mem_fun_ref]]></title><description><![CDATA[<p>hi!</p>
<p>ich bin noch recht neu im c++ geschäft. kürzlich habe ich auf einer website folgenden code entdeckt:</p>
<p>--------------------------<br />
#include &lt;iostream&gt;<br />
#include &lt;vector&gt;<br />
#include &lt;functional&gt;<br />
#include &lt;algorithm&gt;<br />
using namespace std;</p>
<p>struct A<br />
{<br />
void Print(const char* header) const<br />
{<br />
cout &lt;&lt; header &lt;&lt; endl;<br />
}<br />
};</p>
<p>int main()<br />
{<br />
vector&lt;A&gt; objCont(2,A());<br />
for_each(objCont.begin(), objCont.end(), bind2nd(mem_fun_ref(&amp;A::Print), &quot;irgendwas &quot;));<br />
}<br />
--------------------------</p>
<p>mein problem ist nun folgendes: der konstruktor von mem_fun_ref wird aufgerufen, wonach das erste argument von bind2nd eine funktion bzw hier ein funktor ist. im verlaufe der for_each ausführung wird bind2nd mit einem objekt als argument ausgeführt. bind2nd ruft dann wiederum mem_fun_ref mit dem objekt und wie _ich_ verstanden habe, mit dem zweiten argument &quot;irgendwas &quot; auf. Natürlich kann dies so nicht passieren, da mem_fun_ref nur ein argument akzeptiert. stattdessen wird mem_fun_ref nur mit dem objekt als argument ausgeführt und schließlich die funktion Print mit dem string &quot;irgendwas &quot; aufgerufen.<br />
trotz intensivsten nachdenkens ist mir nicht klar, wieso dies funktioniert und der compiler keinen fehler meldet. bind2nd müsste doch versuchen, sowohl das objekt als auch das &quot;irgendwas &quot; mem_fun_ref als argumente mitzugeben.</p>
<p>danke für die hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158285/bind2nd-und-mem_fun_ref</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 15:52:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158285.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Sep 2006 23:22:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bind2nd und mem_fun_ref on Sun, 03 Sep 2006 23:22:14 GMT]]></title><description><![CDATA[<p>hi!</p>
<p>ich bin noch recht neu im c++ geschäft. kürzlich habe ich auf einer website folgenden code entdeckt:</p>
<p>--------------------------<br />
#include &lt;iostream&gt;<br />
#include &lt;vector&gt;<br />
#include &lt;functional&gt;<br />
#include &lt;algorithm&gt;<br />
using namespace std;</p>
<p>struct A<br />
{<br />
void Print(const char* header) const<br />
{<br />
cout &lt;&lt; header &lt;&lt; endl;<br />
}<br />
};</p>
<p>int main()<br />
{<br />
vector&lt;A&gt; objCont(2,A());<br />
for_each(objCont.begin(), objCont.end(), bind2nd(mem_fun_ref(&amp;A::Print), &quot;irgendwas &quot;));<br />
}<br />
--------------------------</p>
<p>mein problem ist nun folgendes: der konstruktor von mem_fun_ref wird aufgerufen, wonach das erste argument von bind2nd eine funktion bzw hier ein funktor ist. im verlaufe der for_each ausführung wird bind2nd mit einem objekt als argument ausgeführt. bind2nd ruft dann wiederum mem_fun_ref mit dem objekt und wie _ich_ verstanden habe, mit dem zweiten argument &quot;irgendwas &quot; auf. Natürlich kann dies so nicht passieren, da mem_fun_ref nur ein argument akzeptiert. stattdessen wird mem_fun_ref nur mit dem objekt als argument ausgeführt und schließlich die funktion Print mit dem string &quot;irgendwas &quot; aufgerufen.<br />
trotz intensivsten nachdenkens ist mir nicht klar, wieso dies funktioniert und der compiler keinen fehler meldet. bind2nd müsste doch versuchen, sowohl das objekt als auch das &quot;irgendwas &quot; mem_fun_ref als argumente mitzugeben.</p>
<p>danke für die hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1130483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1130483</guid><dc:creator><![CDATA[dujek]]></dc:creator><pubDate>Sun, 03 Sep 2006 23:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to bind2nd und mem_fun_ref on Mon, 04 Sep 2006 06:59:03 GMT]]></title><description><![CDATA[<p>soweit ich weiß baut dir mem_fun_ref einen Funktor zu der Funktion. Im Deinem Fall operator()(const char*). bind2nd baut darum herum einen funktor, der den ersten (den von mem_fun_ref) mit dem zu bindenden Argument aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1130538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1130538</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Mon, 04 Sep 2006 06:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to bind2nd und mem_fun_ref on Mon, 04 Sep 2006 08:27:55 GMT]]></title><description><![CDATA[<p>Fast richtig: mem_fun_ref() liefert dir einen op()(T*,const char*), der wiederum die übergebene Memberfunktion aufruft - bind2nd() setzt den zweiten Parameter dieses Funktors fest auf den Wert &quot;irgendwas &quot;.</p>
<p>(und for_each ruft die übergebene Funktion mit jedem Element des übergebenen Bereiches auf - durch die ganzen Zwischenschritte rufst du also für jedes Objekt des Containers die Memberfunktion &quot;Print(&quot;irgendwas &quot;);&quot; auf)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1130564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1130564</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 04 Sep 2006 08:27:55 GMT</pubDate></item></channel></rss>