<?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[unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion]]></title><description><![CDATA[<p>Tach auch,</p>
<p>Wenn ich eine memberfunktion überlade, dass sie einmal ein einzelnes Element und einmal einen vector von Elementen annehmen kann, wieso kann ich dann nicht die einzelfunktion mit for_each aufrufen?</p>
<pre><code class="language-cpp">class Foo {
   void bar(const baz&amp;) { do_something(); }
   void bar(const std::vector&lt;baz&gt;&amp; vec) { std::for_each(vec.begin(), vec.end(), std::bind1st(&amp;Foo::bar, this)); }
};
</code></pre>
<p>g++ 4.4.0 meint dazu:<br />
error: no matching function for call to ‘bind1st(&lt;unresolved overloaded function type&gt;, Foo* const)’</p>
<p>Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264346/unresolved-overloaded-function-type-bei-benutzung-von-for_each-und-überladener-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 00:11:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264346.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Apr 2010 14:15:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:16:24 GMT]]></title><description><![CDATA[<p>Tach auch,</p>
<p>Wenn ich eine memberfunktion überlade, dass sie einmal ein einzelnes Element und einmal einen vector von Elementen annehmen kann, wieso kann ich dann nicht die einzelfunktion mit for_each aufrufen?</p>
<pre><code class="language-cpp">class Foo {
   void bar(const baz&amp;) { do_something(); }
   void bar(const std::vector&lt;baz&gt;&amp; vec) { std::for_each(vec.begin(), vec.end(), std::bind1st(&amp;Foo::bar, this)); }
};
</code></pre>
<p>g++ 4.4.0 meint dazu:<br />
error: no matching function for call to ‘bind1st(&lt;unresolved overloaded function type&gt;, Foo* const)’</p>
<p>Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878351</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:23:53 GMT]]></title><description><![CDATA[<p>Schau dir mal<a href="http://www.cplusplus.com/reference/std/functional/mem_fun/" rel="nofollow"> <code>std::mem_fun()</code> </a>an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878355</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:26:24 GMT]]></title><description><![CDATA[<p>geht auch nicht:</p>
<p>error: no matching function for call to ‘mem_fun(&lt;unresolved overloaded function type&gt;)’</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878358</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:34:55 GMT]]></title><description><![CDATA[<p>Ja, war auch Unsinn. <code>mem_fun()</code> braucht man, um Memberfunktionen der Elemente selbst aufzurufen. Sorry, ich hab dein Problem falsch gelesen.</p>
<p>Mit Überladungen haben Funktionsobjekte so ihre Schwierigkeiten. Bei <code>&amp;Foo::bar</code> ist ja nicht ohne Weiteres klar, welche Funktion gemeint ist. So funktioniert z.B. auch <code>std::tr1::bind()</code> nicht.</p>
<p>Ich denke, um eine gute alte Schleife wirst du nicht herumkommen, wenn die Methoden gleich heissen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878359</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:41:33 GMT]]></title><description><![CDATA[<p>Boah wie ich das hasse. C++/STL hat soooo viele tolle Features, aber wenn man sie mal so richtig nutzen will, geht's nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878367</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 14:43:13 GMT]]></title><description><![CDATA[<p>Nicht verzweifeln. So gehts:</p>
<pre><code class="language-cpp">void bar(const std::vector&lt;int&gt;&amp; vec) 
   {
      void (Foo::*first)(const int&amp;) = &amp;Foo::bar;
	  std::for_each(vec.begin(), vec.end(), std::tr1::bind(first, this, _1));
   }
</code></pre>
<p>Da ich <code>std::bind1st</code> hasse und es verbuggt ist, bin ich mir nicht sicher, ob es damit auch geht. Aber <code>tr1::bind</code> ist eh besser. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1878368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 06 Apr 2010 14:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 21:49:40 GMT]]></title><description><![CDATA[<p>Okay, danke.</p>
<p>Ich revidiere obige Aussage zu folgender:<br />
&quot;Boah wie ich das hasse. C++/STL hat soooo viele tolle Features, aber wenn man sie mal so richtig nutzen will, muss man Code produzieren, den kein Mensch mehr lesen kann.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878547</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 06 Apr 2010 21:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 22:01:44 GMT]]></title><description><![CDATA[<p>Ich find das eigentlich ganz lesbar. Ist aber wahrscheinlich Gewöhnungssache.</p>
<p>Was es halt für dich schwer zu lesen macht ist die Tatsache, dass da in der Zeile sehr viel drin steckt. Schreib das mal auf &quot;deine&quot; Art aus und dann merkst du, dass da eigentlich sehr viel eleganz drin ist das in einer Zeile zu machen. Und es wird dir dann auch jeder bestätigen, dass der Einzeiler sehr viel klarer ist, als irgendwelche Schleifengebastlereien, wo jeder Leser zuerst alles anschauen muss, bis er überhaupt verstehen kann, was es macht.<br />
Hier habe ich genau diese eine Zeile angeschaut und wusste, was sie machen sollte. Bei einem Schleifenkonstrukt hätte ich zuerst mal die Bedingung anschauen müssen, wann/wo inkrementiert wird und schlussendlich noch den eigentlichen Code. Wenn das mal keine Zeitersparnis ist. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1878551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878551</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 06 Apr 2010 22:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 22:18:32 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>&quot;Boah wie ich das hasse. C++/STL hat soooo viele tolle Features, aber wenn man sie mal so richtig nutzen will, muss man Code produzieren, den kein Mensch mehr lesen kann.&quot;</p>
</blockquote>
<p>Du findest einen Memberfunktionszeiger unlesbar? Wahrscheinlich nur, weil du noch nicht oft damit gearbeitet hast. Dabei ist das etwas ziemlich Zentrales, wenns in Richtung STL und funktionales Programmieren geht. Die drei Möglichkeiten für Callables sind nämlich Funktionszeiger, Memberfunktionszeiger und Funktionsobjekte. Für effizientes Arbeiten mit den STL-Algorithmen würde ich deren Kenntnis voraussetzen.</p>
<p>Bedenke ausserdem, dass der gezeigte Code sehr kompakt ist. Da die beiden Methoden gleich heissen, <strong>brauchst</strong> du eine Zusatzinformation, um sie auseinanderzuhalten. Und das ist eben die Signatur von <code>bar</code> , welche in den Typ des Funktionszeigers einfliesst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878557</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 06 Apr 2010 22:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to unresolved overloaded function type bei benutzung von for_each und überladener Memberfunktion on Tue, 06 Apr 2010 22:28:47 GMT]]></title><description><![CDATA[<p>Ja. Die Überladung ist unglücklich. Allerdings kannst du einen kleinen Trick verwenden, wenn du das noch reduzieren möchtest:</p>
<pre><code class="language-cpp">void bar(const std::vector&lt;int&gt;&amp; vec, int i = 0)
   {
      std::for_each(vec.begin(), vec.end(), std::tr1::bind(&amp;foo::bar, this, _1));
   }
</code></pre>
<p>Obwohl ich das ein wenig merkwürdig finde, dass es funktioniert (MSVC).<br />
Würde sogar behaupten, dass das ein Bug ist, da sich die Funktion <strong>eigentlich</strong> gleich verhalten müsste, als ob da kein Parameter ist. Wäre mal etwas, um mal wieder den Standard zu wälzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878560</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 06 Apr 2010 22:28:47 GMT</pubDate></item></channel></rss>