<?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[STL Problem]]></title><description><![CDATA[<p>Ich hab da mal ein Problem:</p>
<p>Gegeben (rudimentär, aus dem Kopf wiedergegeben):</p>
<pre><code class="language-cpp">class Obj

vector&lt;Obj&gt; contObj;

class Filter
{
public:
   bool applyTo(Obj const &amp;); // kann auch bool operator()(Obj const &amp;) gewesen sein...
}
</code></pre>
<p>Nun soll der Vector gefiltert werden:</p>
<pre><code class="language-cpp">contObj.erase(remove_if(contObj.begin(), contObj.end(), pred), contObj.end());
</code></pre>
<p>Wie muss nun pred aussehen? Irgendwie steh ich da auf dem Schlauch....<br />
Spendiere ich Obj ein</p>
<pre><code class="language-cpp">bool applyFilter(Filter const &amp;)
</code></pre>
<p>dann ginge es ja mit</p>
<pre><code class="language-cpp">Filter filter;
...
mem_fun_ref(bind2nd(&amp;Obj::applyFilter, filter))
</code></pre>
<p>Das ist aber in meinen Augen OO-technisch &quot;durch die Brust ins Auge&quot;, schliesslich filtert ja Filter die Obj</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202595/stl-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 21:21:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202595.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jan 2008 12:46:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Problem on Sun, 13 Jan 2008 12:53:26 GMT]]></title><description><![CDATA[<p>Ich hab da mal ein Problem:</p>
<p>Gegeben (rudimentär, aus dem Kopf wiedergegeben):</p>
<pre><code class="language-cpp">class Obj

vector&lt;Obj&gt; contObj;

class Filter
{
public:
   bool applyTo(Obj const &amp;); // kann auch bool operator()(Obj const &amp;) gewesen sein...
}
</code></pre>
<p>Nun soll der Vector gefiltert werden:</p>
<pre><code class="language-cpp">contObj.erase(remove_if(contObj.begin(), contObj.end(), pred), contObj.end());
</code></pre>
<p>Wie muss nun pred aussehen? Irgendwie steh ich da auf dem Schlauch....<br />
Spendiere ich Obj ein</p>
<pre><code class="language-cpp">bool applyFilter(Filter const &amp;)
</code></pre>
<p>dann ginge es ja mit</p>
<pre><code class="language-cpp">Filter filter;
...
mem_fun_ref(bind2nd(&amp;Obj::applyFilter, filter))
</code></pre>
<p>Das ist aber in meinen Augen OO-technisch &quot;durch die Brust ins Auge&quot;, schliesslich filtert ja Filter die Obj</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435850</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Sun, 13 Jan 2008 12:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Sun, 13 Jan 2008 15:09:08 GMT]]></title><description><![CDATA[<p>Das Prädikat muß entweder eine (statische Klassen-)Funktion oder aber ein Funktor (Funktionsobjekt) sein, z.B.</p>
<pre><code class="language-cpp">bool /*Filter::*/applyFilter(const Obj &amp;obj)
{
  return obj. /* ... */;
}

//Aufruf:
remove_if(contObj.begin(), contObj.end(), /*&amp;Filter::*/applyFilter);

// oder

struct ApplyFilter
{
  bool operator ()(const Obj &amp;obj) const
  {
     return obj./* ... */;
  }
};

//Aufruf:
remove_if(contObj.begin(), contObj.end(), ApplyFilter());
</code></pre>
<p>Der Vorteil beim Funktor ist, daß du dort noch einen Konstruktor mit Parametern erzeugen kannst, falls du z.B. noch eine Konstante als Vergleichswert übergeben willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435920</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sun, 13 Jan 2008 15:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Sun, 13 Jan 2008 15:19:08 GMT]]></title><description><![CDATA[<p>bind1st statt bind2nd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435931</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 13 Jan 2008 15:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Mon, 14 Jan 2008 09:52:22 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Das Prädikat muß entweder eine (statische Klassen-)Funktion oder aber ein Funktor (Funktionsobjekt) sein, z.B.</p>
<pre><code class="language-cpp">bool /*Filter::*/applyFilter(const Obj &amp;obj)
{
  return obj. /* ... */;
}

//Aufruf:
remove_if(contObj.begin(), contObj.end(), /*&amp;Filter::*/applyFilter);

// oder

struct ApplyFilter
{
  bool operator ()(const Obj &amp;obj) const
  {
     return obj./* ... */;
  }
};

//Aufruf:
remove_if(contObj.begin(), contObj.end(), ApplyFilter());
</code></pre>
<p>Der Vorteil beim Funktor ist, daß du dort noch einen Konstruktor mit Parametern erzeugen kannst, falls du z.B. noch eine Konstante als Vergleichswert übergeben willst.</p>
</blockquote>
<p>Ja, das mit dem Funktor ist mir bekannt, hab ich schon mehrfach so benutzt. Das Problem ist nur, dass es eben nicht nur einen Filter gibt, sondern deren unterschiedliche, die per Filter * aus einer FilterFactory kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436240</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Mon, 14 Jan 2008 09:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Mon, 14 Jan 2008 09:48:56 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>bind1st statt bind2nd</p>
</blockquote>
<p>Wie meinst Du das genau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436241</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Mon, 14 Jan 2008 09:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Mon, 14 Jan 2008 09:52:12 GMT]]></title><description><![CDATA[<p>Na dann dürften doch die STL-Funktionsadapter der richtige Weg sein - du mußt sie nur in der richtigen Reihenfolge anwenden:</p>
<pre><code class="language-cpp">bool Filter::apply(const Obj&amp; ob)
{
  return obj./*...*/;
}

reomove_if(...,bind1st(mem_fun_ref(&amp;Filter::apply),filter));
</code></pre>
<p>(wobei es eventuell eleganter wäre, wenn deine Filter-Klasse den op() selbst überlädt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436244</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 14 Jan 2008 09:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to STL Problem on Wed, 16 Jan 2008 10:12:18 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Na dann dürften doch die STL-Funktionsadapter der richtige Weg sein - du mußt sie nur in der richtigen Reihenfolge anwenden:</p>
<pre><code class="language-cpp">bool Filter::apply(const Obj&amp; ob)
{
  return obj./*...*/;
}

reomove_if(...,bind1st(mem_fun_ref(&amp;Filter::apply),filter));
</code></pre>
<p>(wobei es eventuell eleganter wäre, wenn deine Filter-Klasse den op() selbst überlädt)</p>
</blockquote>
<p>Danke, das funktioniert jetzt soweit. Und ich hab das auch auf operator() umgestellt, das ist mir persönlich nämlich auch lieber <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/1436293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436293</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 16 Jan 2008 10:12:18 GMT</pubDate></item></channel></rss>