<?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[Problem mit std::for_each und boost::shared_ptr]]></title><description><![CDATA[<p>Hallo an Alle</p>
<p>Ich habe ein Problem mit dem Aufruf von std::foreach im Zusammenhang mit shared_ptr.</p>
<pre><code>class bar{};

class foo
{
  void do(bar&amp; b);
};

typedef boost::shared_ptr&lt;foo&gt; foo_ptr;

void func(bar&amp; b)
{
  std::vector&lt;foo_ptr&gt; foos; //gefüllt 

  //Für jedes Element foo::do aufrufen und b übergeben.
  std::for_each(foos.begin(), foos.end(), ???); 
}
</code></pre>
<p>Wenn ich mit boost::bind oder std::mem_fun1_t arbeite bekomme ich immer die Fehlermeldung, dass boost::shared_ptr&lt;foo&gt; keinen Member namens &quot;do&quot; hat. Mir ist auch schon klar, warum die Meldung kommt, jedoch weiß ich nicht, wie ich es umgehen soll. Im Aufruf von foreach müsste der share_ptr dereferenziert werden und dann kann die Methode aufgerufen werden.</p>
<p>Hat jemand ne Ahnung wie ich das anstellen kann?</p>
<p>Grüße<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245150/problem-mit-std-for_each-und-boost-shared_ptr</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 23:32:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245150.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jul 2009 10:34:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit std::for_each und boost::shared_ptr on Fri, 10 Jul 2009 10:34:02 GMT]]></title><description><![CDATA[<p>Hallo an Alle</p>
<p>Ich habe ein Problem mit dem Aufruf von std::foreach im Zusammenhang mit shared_ptr.</p>
<pre><code>class bar{};

class foo
{
  void do(bar&amp; b);
};

typedef boost::shared_ptr&lt;foo&gt; foo_ptr;

void func(bar&amp; b)
{
  std::vector&lt;foo_ptr&gt; foos; //gefüllt 

  //Für jedes Element foo::do aufrufen und b übergeben.
  std::for_each(foos.begin(), foos.end(), ???); 
}
</code></pre>
<p>Wenn ich mit boost::bind oder std::mem_fun1_t arbeite bekomme ich immer die Fehlermeldung, dass boost::shared_ptr&lt;foo&gt; keinen Member namens &quot;do&quot; hat. Mir ist auch schon klar, warum die Meldung kommt, jedoch weiß ich nicht, wie ich es umgehen soll. Im Aufruf von foreach müsste der share_ptr dereferenziert werden und dann kann die Methode aufgerufen werden.</p>
<p>Hat jemand ne Ahnung wie ich das anstellen kann?</p>
<p>Grüße<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740284</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Fri, 10 Jul 2009 10:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::for_each und boost::shared_ptr on Fri, 10 Jul 2009 10:48:07 GMT]]></title><description><![CDATA[<p>Im Zweifel in etwa so, wobei ich mir nicht vorstellen kann dass sich dafür nicht schon jemand was einfacheres gebastelt hat.</p>
<pre><code class="language-cpp">bind( &amp;foo::do, bind( &amp;shared_ptr&lt; foo &gt;::get, _1 ), ref( b ) )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740293</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 10 Jul 2009 10:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::for_each und boost::shared_ptr on Fri, 10 Jul 2009 11:04:08 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Im Zweifel in etwa so, wobei ich mir nicht vorstellen kann dass sich dafür nicht schon jemand was einfacheres gebastelt hat.</p>
<pre><code class="language-cpp">bind( &amp;foo::do, bind( &amp;shared_ptr&lt; foo &gt;::get, _1 ), ref( b ) )
</code></pre>
</blockquote>
<p>Also da es funktioniert, finde ich es einfach genug und ärgere mich grade, dass ich da net selber drauf gekommen bin <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>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740308</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Fri, 10 Jul 2009 11:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::for_each und boost::shared_ptr on Fri, 10 Jul 2009 12:24:19 GMT]]></title><description><![CDATA[<p>horscht2999 schrieb:</p>
<blockquote>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Im Zweifel in etwa so, wobei ich mir nicht vorstellen kann dass sich dafür nicht schon jemand was einfacheres gebastelt hat.</p>
<pre><code class="language-cpp">bind( &amp;foo::do, bind( &amp;shared_ptr&lt; foo &gt;::get, _1 ), ref( b ) )
</code></pre>
</blockquote>
<p>Also da es funktioniert, ...</p>
</blockquote>
<p>ja - aber notwendig war das nur in den ersten Versionen mit boost.bind. Wenn Du eine aktuelle Version von boost verwendest, sollte das einfachere</p>
<pre><code class="language-cpp">bind( &amp;foo::do, _1, ref( b ) )
</code></pre>
<p>auch funktionieren (nenne keine Methode 'do').</p>
<p>Siehe dazu die <a href="http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/shared_ptr.htm#get_pointer" rel="nofollow">get_pointer-Konstruktion</a> für Smart-Pointer in Kombination mit bind &amp; mem_fn.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740382</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 10 Jul 2009 12:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::for_each und boost::shared_ptr on Fri, 10 Jul 2009 15:53:16 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>ja - aber notwendig war das nur in den ersten Versionen mit boost.bind. Wenn Du eine aktuelle Version von boost verwendest, sollte das einfachere</p>
<pre><code class="language-cpp">bind( &amp;foo::do, _1, ref( b ) )
</code></pre>
<p>auch funktionieren (nenne keine Methode 'do').</p>
<p>Siehe dazu die <a href="http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/shared_ptr.htm#get_pointer" rel="nofollow">get_pointer-Konstruktion</a> für Smart-Pointer in Kombination mit bind &amp; mem_fn.</p>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>Jap hat funktioniert. Komischerweise hatte ich das so auch probiert, aber bekam die oben erwähnte Fehlermeldung. Eventuell hatt ich aber nicht bind verwendet sondern mem_fn.</p>
<p>Naja jetzt gehts und ich bin etwas schlauer geworden:-) Vielen Dank!!!</p>
<p>Grüße<br />
Timo</p>
<p>PS: natürlich nenne ich auch keine Methode &quot;do&quot;:-) War nur ein schnell gehacktes Beispiel:-)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740509</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Fri, 10 Jul 2009 15:53:16 GMT</pubDate></item></channel></rss>