<?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[Funktionslokales struct kann nicht als Funktor verwendet werden]]></title><description><![CDATA[<p>Jaja, ich weiß, es gibt jetzt in C++11 Lambdas für diesen Fall.<br />
Aber der Code muss auf gcc 4.2 laufen, da gibts keinen C++11-Lambda-Support.</p>
<p>Folgender code</p>
<pre><code class="language-cpp">void Foo::bar()
{
    std::vector&lt;Baz&gt; bazzes;
    struct closure {
        bool operator()(const Baz&amp; x) { return !x.isAwesome(); }
    } deleter;

    bazzes.erase(std::remove_if(bazzes.begin(), bazzes.end(), deleter), bazzes.end());
}
</code></pre>
<p>Funktioniert nur, wenn ich das struct closure aus der Funktion herausziehe und in der Klasse deklariere. Wo es eigentlich nix zu suchen hat.<br />
Funktionslokal bekomme ich eine Fehlermeldung:</p>
<pre><code>error: no matching function for call to 'remove_if(__gnu_cxx::__normal_iterator&lt;Baz*, std::vector&lt;Baz, std::allocator&lt;Baz&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;Baz*, std::vector&lt;Baz, std::allocator&lt;Baz&gt; &gt; &gt;, Foo::bar()::closure&amp;)'
</code></pre>
<p>ist das ein Bug oder ein Feature?</p>
<p>Gruß,<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303246/funktionslokales-struct-kann-nicht-als-funktor-verwendet-werden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 14:46:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303246.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 May 2012 20:16:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Tue, 08 May 2012 20:16:12 GMT]]></title><description><![CDATA[<p>Jaja, ich weiß, es gibt jetzt in C++11 Lambdas für diesen Fall.<br />
Aber der Code muss auf gcc 4.2 laufen, da gibts keinen C++11-Lambda-Support.</p>
<p>Folgender code</p>
<pre><code class="language-cpp">void Foo::bar()
{
    std::vector&lt;Baz&gt; bazzes;
    struct closure {
        bool operator()(const Baz&amp; x) { return !x.isAwesome(); }
    } deleter;

    bazzes.erase(std::remove_if(bazzes.begin(), bazzes.end(), deleter), bazzes.end());
}
</code></pre>
<p>Funktioniert nur, wenn ich das struct closure aus der Funktion herausziehe und in der Klasse deklariere. Wo es eigentlich nix zu suchen hat.<br />
Funktionslokal bekomme ich eine Fehlermeldung:</p>
<pre><code>error: no matching function for call to 'remove_if(__gnu_cxx::__normal_iterator&lt;Baz*, std::vector&lt;Baz, std::allocator&lt;Baz&gt; &gt; &gt;, __gnu_cxx::__normal_iterator&lt;Baz*, std::vector&lt;Baz, std::allocator&lt;Baz&gt; &gt; &gt;, Foo::bar()::closure&amp;)'
</code></pre>
<p>ist das ein Bug oder ein Feature?</p>
<p>Gruß,<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209626</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 08 May 2012 20:16:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Tue, 08 May 2012 20:30:20 GMT]]></title><description><![CDATA[<p>Edit²: Versuch mal von <code>std::unary_function&lt;Baz const&amp;, bool&gt;</code> abzuleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209630</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 08 May 2012 20:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Tue, 08 May 2012 20:30:49 GMT]]></title><description><![CDATA[<p>Weder Bug noch Feature, sondern streng standardkonform:</p>
<p>c++-98 Standard schrieb:</p>
<blockquote>
<p>A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.</p>
</blockquote>
<p>C++11 hat die Einschränkung nicht mehr, aber da hast du sowieso Lambdas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209632</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 May 2012 20:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Wed, 09 May 2012 07:30:11 GMT]]></title><description><![CDATA[<p>Alternative:</p>
<pre><code class="language-cpp">bazzes.erase(
   std::remove_if(bazzes.begin(), bazzes.end(), !boost::bind(&amp;Baz::isAwesome,_1)),
   bazzes.end() );
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209713</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 09 May 2012 07:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Wed, 09 May 2012 07:51:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a> Wie soll denn der ! Operator da funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209722</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 09 May 2012 07:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Wed, 09 May 2012 09:58:38 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a> Wie soll denn der ! Operator da funktionieren?</p>
</blockquote>
<p><a href="http://www.boost.org/doc/libs/1_49_0/libs/bind/bind.html#operators" rel="nofollow">so ungefähr</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209772</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 09 May 2012 09:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionslokales struct kann nicht als Funktor verwendet werden on Wed, 09 May 2012 10:06:58 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p><a href="http://www.boost.org/doc/libs/1_49_0/libs/bind/bind.html#operators" rel="nofollow">so ungefähr</a></p>
</blockquote>
<p>Oh, nett, das wusste ich nicht. <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/2209774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209774</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 09 May 2012 10:06:58 GMT</pubDate></item></channel></rss>