<?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[Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche gerade for_each zu verwenden und habe Probleme den richtigen Binder zu finden..</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

using namespace std;
class Visitor;

struct Element
{
  void accept(Visitor&amp;);
};

struct Visitor
{
  void visit(Element&amp; e)
  {
    cout &lt;&lt; &quot;Element visited!\n&quot;;
  }

  void visitAll(vector&lt; Element* &gt; vec)
  {
    /* 
    vector&lt; Element* &gt;&amp; elements = vec;
    for( vector&lt; Element* &gt;::iterator iter = elements.begin()
           ; iter != elements.end()
           ; ++iter){
      (*iter)-&gt;accept(*this);
    }
    //*/

    // Problem: das obere (funktioniert) haette ich gerne per for_each() mit binder
    // folgender Ansatz klappt jedoch leider nicht..
    for_each(vec.begin(), vec.end(), mem_fun1_ref_t&lt; void, Element*, Visitor &gt;(&amp;Element::accept, this)); // bind2nd()??!!!
  }
};

void Element::accept(Visitor&amp; v)
{
  v.visit(*this);
}

int main()
{
  cout &lt;&lt; &quot;init..\n&quot;;
  vector&lt; Element* &gt; vec;
  Element elem1, elem2, elem3;
  vec.push_back(&amp;elem1);
  vec.push_back(&amp;elem2);
  vec.push_back(&amp;elem3);

  Visitor visitor;
  visitor.visitAll(vec);
  cout &lt;&lt; &quot;READY.\n&quot;;

  return 0;
}
</code></pre>
<p>Danke im voraus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235738/richtiger-binder-fuer-memberfunktion-die-this-als-argument-braucht-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:00:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235738.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Mar 2009 19:27:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Thu, 05 Mar 2009 19:28:24 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche gerade for_each zu verwenden und habe Probleme den richtigen Binder zu finden..</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

using namespace std;
class Visitor;

struct Element
{
  void accept(Visitor&amp;);
};

struct Visitor
{
  void visit(Element&amp; e)
  {
    cout &lt;&lt; &quot;Element visited!\n&quot;;
  }

  void visitAll(vector&lt; Element* &gt; vec)
  {
    /* 
    vector&lt; Element* &gt;&amp; elements = vec;
    for( vector&lt; Element* &gt;::iterator iter = elements.begin()
           ; iter != elements.end()
           ; ++iter){
      (*iter)-&gt;accept(*this);
    }
    //*/

    // Problem: das obere (funktioniert) haette ich gerne per for_each() mit binder
    // folgender Ansatz klappt jedoch leider nicht..
    for_each(vec.begin(), vec.end(), mem_fun1_ref_t&lt; void, Element*, Visitor &gt;(&amp;Element::accept, this)); // bind2nd()??!!!
  }
};

void Element::accept(Visitor&amp; v)
{
  v.visit(*this);
}

int main()
{
  cout &lt;&lt; &quot;init..\n&quot;;
  vector&lt; Element* &gt; vec;
  Element elem1, elem2, elem3;
  vec.push_back(&amp;elem1);
  vec.push_back(&amp;elem2);
  vec.push_back(&amp;elem3);

  Visitor visitor;
  visitor.visitAll(vec);
  cout &lt;&lt; &quot;READY.\n&quot;;

  return 0;
}
</code></pre>
<p>Danke im voraus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674851</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Thu, 05 Mar 2009 19:28:24 GMT</pubDate></item><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Thu, 05 Mar 2009 21:09:45 GMT]]></title><description><![CDATA[<p>Falls Du schon den TR1 benutzt:</p>
<pre><code class="language-cpp">using std::tr1::placeholders::_1;
std::for_each(vec.begin(), vec.end(), std::tr1::bind(&amp;Element::accept, _1, *this));
</code></pre>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674919</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 05 Mar 2009 21:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Thu, 05 Mar 2009 21:36:38 GMT]]></title><description><![CDATA[<p>Hallo, ich habe vergessen zu sagen, dass ich gerne eine Loesung haette die ohne Boost auskommt (binder waere ansonsten meine erste Wahl gewesen), somit verwende ich auch keine Placeholder (leider - sind die schon im Standard?? Bei mir kompiliert der Code so ohne Boost Einbindung auch nicht).</p>
<p>Ich wollte eben wissen, wie man das per bind1st(), bind2nd() oder mem_fun_ptr/ref/_t() realisieren koennte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674936</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Thu, 05 Mar 2009 21:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Thu, 05 Mar 2009 21:49:52 GMT]]></title><description><![CDATA[<p>Hier noch die Lsg ohne TR1 impl. (das ist nicht Boost, sondern eben die TR1 impl.). Noch kein definitiver Standard also, sind bei MS Visual Studio 2008 ab SP1 dabei (ev. bei 2005 SPx auch).</p>
<p>Dazu musst Du dein Element anpassen. Das Problem liegt im Template, welches sonst versucht eine Ref. einer Ref. zu bilden, was nicht geht.</p>
<pre><code class="language-cpp">struct Element 
{ 
  void accept(Visitor*);
};
</code></pre>
<pre><code class="language-cpp">std::for_each(vec.begin(), vec.end(), std::bind2nd(std::mem_fun(&amp;Element::accept), this));
</code></pre>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674957</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 05 Mar 2009 21:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Fri, 06 Mar 2009 06:54:22 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Noch kein definitiver Standard also, sind bei MS Visual Studio 2008 ab SP1 dabei (ev. bei 2005 SPx auch).</p>
</blockquote>
<p>Doch, TR1 ist definitiver Standard. Nur eben optional und damit nicht verpflichtend, um seinen Compiler &quot;C++98 konform&quot; nennen zu dürfen (aber welcher Compiler ist das schon).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675022</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 06 Mar 2009 06:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Richtiger Binder fuer Memberfunktion die *this als Argument braucht, geht nicht on Fri, 06 Mar 2009 16:42:25 GMT]]></title><description><![CDATA[<p>Danke, der Ansantz mit bind2nd funktioniert perfekt. Jetzt weiss ich auch warum meine bind2nd Versuche immer gescheitert sind..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675403</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 06 Mar 2009 16:42:25 GMT</pubDate></item></channel></rss>