<?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[boost::bind bei member]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;std::string&gt; strings; 
  strings.push_back(&quot;Boost&quot;); 
  strings.push_back(&quot;C++&quot;); 
  strings.push_back(&quot;Libraries&quot;); 

  std::vector&lt;int&gt; sizes; 

  std::for_each(strings.begin(), strings.end(),
	  boost::bind(&amp;std::vector&lt;int&gt;::push_back, sizes, _1));
</code></pre>
<pre><code>error C2664: 'R boost::_mfi::mf1&lt;R,T,A1&gt;::operator ()&lt;T&gt;(const U &amp;,A1) const' : cannot convert parameter 2 from 'std::basic_string&lt;_Elem,_Traits,_Ax&gt;' to 'const int &amp;'
</code></pre>
<p>Hallo, was ist falsch?<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254637/boost-bind-bei-member</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 16:46:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254637.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Nov 2009 07:37:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::bind bei member on Thu, 19 Nov 2009 07:37:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;std::string&gt; strings; 
  strings.push_back(&quot;Boost&quot;); 
  strings.push_back(&quot;C++&quot;); 
  strings.push_back(&quot;Libraries&quot;); 

  std::vector&lt;int&gt; sizes; 

  std::for_each(strings.begin(), strings.end(),
	  boost::bind(&amp;std::vector&lt;int&gt;::push_back, sizes, _1));
</code></pre>
<pre><code>error C2664: 'R boost::_mfi::mf1&lt;R,T,A1&gt;::operator ()&lt;T&gt;(const U &amp;,A1) const' : cannot convert parameter 2 from 'std::basic_string&lt;_Elem,_Traits,_Ax&gt;' to 'const int &amp;'
</code></pre>
<p>Hallo, was ist falsch?<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810255</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Thu, 19 Nov 2009 07:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to boost::bind bei member on Thu, 19 Nov 2009 07:39:44 GMT]]></title><description><![CDATA[<p>Wie dumm von mir. Zeile 6 muss natürlich vom Typ std::string sein. Wenn gerade schon einmal ein Thread auf ist, hat einer eine Idee, wie ich mit std::for_each nun die jeweilige std::string-Länge in &quot;std::vector&lt;int&gt; sizes;&quot; schreibe?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810257</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Thu, 19 Nov 2009 07:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to boost::bind bei member on Thu, 19 Nov 2009 08:16:47 GMT]]></title><description><![CDATA[<p>Ungetestet:</p>
<pre><code class="language-cpp">std::for_each(strings.begin(), strings.end(),
      boost::bind(&amp;std::vector&lt;int&gt;::push_back, boost::ref(sizes), 
            boost::bind(&amp;std::string::length, _1)));
</code></pre>
<p>Eleganter wäre aber wohl:</p>
<pre><code class="language-cpp">transform(strings.begin(), strings.end(), back_inserter(sizes), bind(&amp;string::length, _1));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1810274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810274</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 19 Nov 2009 08:16:47 GMT</pubDate></item><item><title><![CDATA[Reply to boost::bind bei member on Thu, 19 Nov 2009 09:20:02 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Wie dumm von mir. Zeile 6 muss natürlich vom Typ std::string sein.</p>
</blockquote>
<p>Da liegt noch mehr im Argen: bind kopiert die Parameter. Du müsstest einen Referenz-Wrapper benutzen ( <code>boost::ref(sizes)</code> ). Außerdem wird demnächst (C++0x) push_back überladen, was dazu führt, dass <code>&amp;vector&lt;string&gt;::push_back</code> sich auf mehr als eine Funktion bezieht und nicht mehr für &quot;Template-Argument-Deduction&quot; benutzt werden kann. <code>back_inserter</code> ist da die bessere Lösung. bind mit Elementfunktionszeiger wird man in C++0x wohl zugunsten von Lambdas weniger benutzen.</p>
<p>Alternativ kann man einen transform_iterator benutzen:</p>
<pre><code class="language-cpp">vector&lt;int&gt; sizes (tibeg, tiend);
</code></pre>
<p>wobei tibeg und tiend <a href="http://www.boost.org/doc/libs/1_40_0/libs/iterator/doc/transform_iterator.html" rel="nofollow">transform_iterator</a>en sind, welche nur die Länge der Strings zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810308</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 19 Nov 2009 09:20:02 GMT</pubDate></item></channel></rss>