<?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[find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt;]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;boost/function.hpp&gt;

void Foo() {}
void Bar() {}

int main()
{
    typedef std::vector&lt;boost::function&lt;void()&gt; &gt; VectorType;

    VectorType v;
    v.push_back(Foo);
    v.push_back(Bar);

    boost::function&lt;void()&gt; f = Foo;    
    VectorType::iterator it = find(v.begin(), v.end(), f);

    assert(it != v.end());
    v.erase(it);
}
</code></pre>
<p>Ich möchte ein weiteres boost::function-Objekt in dem vector suchen, um es daraus zu entfernen. Doch ich erhalte schöne viele Fehlermeldungen:</p>
<pre><code class="language-cpp">error: ambiguous overload for 'operator==' in '(&amp;__first)-&gt;__gnu_cxx::__normal_
iterator&lt;_Iterator, _Container&gt;::operator* [with _Iterator = boost::function&lt;void ()(), std::a... (gekürzte Fassung)
</code></pre>
<p>Auf der boost-Seite steht etwas zum Thema vergleichen von zwei function-Objekten, ich benötige die Funktion boost::function_equal, doch wie kann ich die einbauen in find()???</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153676/find-mit-std-vector-lt-boost-function-lt-void-gt-gt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 15:02:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153676.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Jul 2006 14:57:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 14:58:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;boost/function.hpp&gt;

void Foo() {}
void Bar() {}

int main()
{
    typedef std::vector&lt;boost::function&lt;void()&gt; &gt; VectorType;

    VectorType v;
    v.push_back(Foo);
    v.push_back(Bar);

    boost::function&lt;void()&gt; f = Foo;    
    VectorType::iterator it = find(v.begin(), v.end(), f);

    assert(it != v.end());
    v.erase(it);
}
</code></pre>
<p>Ich möchte ein weiteres boost::function-Objekt in dem vector suchen, um es daraus zu entfernen. Doch ich erhalte schöne viele Fehlermeldungen:</p>
<pre><code class="language-cpp">error: ambiguous overload for 'operator==' in '(&amp;__first)-&gt;__gnu_cxx::__normal_
iterator&lt;_Iterator, _Container&gt;::operator* [with _Iterator = boost::function&lt;void ()(), std::a... (gekürzte Fassung)
</code></pre>
<p>Auf der boost-Seite steht etwas zum Thema vergleichen von zwei function-Objekten, ich benötige die Funktion boost::function_equal, doch wie kann ich die einbauen in find()???</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100472</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 14:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 15:39:48 GMT]]></title><description><![CDATA[<p>müßte doch mit 'nem Functor gehen</p>
<pre><code class="language-cpp">struct FuncEqual
{
  typedef boost::function&lt;void()&gt; BoostFunc;
  FuncEqual( BoostFunc&amp; theFunc ) : m_Func(theFunc){}
  bool operator()( const BoostFunc&amp; check )const
  {
       return function_equal(m_Func, check);
  }
  BoostFunc&amp; m_Func;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1100502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100502</guid><dc:creator><![CDATA[TheBigW@Work]]></dc:creator><pubDate>Wed, 19 Jul 2006 15:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 15:59:27 GMT]]></title><description><![CDATA[<p>Scheiße, ich komm einfach nicht weiter. ich hab das jetzt eingebaut doch es klappt immer noch net:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;boost/function.hpp&gt;

void Foo() {}
void Bar() {}

struct FuncEqual
{
  typedef boost::function&lt;void()&gt; BoostFunc;
  FuncEqual( BoostFunc&amp; theFunc ) : m_Func(theFunc){}
  bool operator()( const BoostFunc&amp; check )const
  {
       return boost::function_equal(m_Func, check);
  }
  BoostFunc&amp; m_Func;
};

int main()
{
    typedef std::vector&lt;boost::function&lt;void()&gt; &gt; VectorType;

    VectorType v;
    v.push_back(Foo);
    v.push_back(Bar);

    boost::function&lt;void()&gt; f = Foo;
    VectorType::iterator it = find_if(v.begin(), v.end(), f, FuncEqual);

    assert(it != v.end());
    v.erase(it);
}
</code></pre>
<p>Fehlermeldungen:</p>
<pre><code>main5.cpp: In function `int main()':
main5.cpp:27: error: expected primary-expression before ')' token
C:/Boost/include/boost-1_33_1/boost/function_equal.hpp: In function `bool 
boost::function_equal_impl(const F&amp;, const G&amp;, long int) [with F = 
boost::function&lt;void ()(), std::allocator&lt;void&gt; &gt;, G = boost::function&lt;void 
()(), std::allocator&lt;void&gt; &gt;]':
C:/Boost/include/boost-1_33_1/boost/function_equal.hpp:24:   instantiated from 
`bool boost::function_equal(const F&amp;, const G&amp;) [with F = boost::function&lt;void 
()(), std::allocator&lt;void&gt; &gt;, G = boost::function&lt;void ()(), 
std::allocator&lt;void&gt; &gt;]'
main5.cpp:13:   instantiated from here
C:/Boost/include/boost-1_33_1/boost/function_equal.hpp:17: error: ambiguous 
overload for 'operator==' in 'f == g'
C:/Boost/include/boost-1_33_1/boost/function_equal.hpp:17: note: candidates are:
 operator==(void (boost::function0&lt;void, std::allocator&lt;void&gt; &gt;::dummy::*)(), 
void (boost::function0&lt;void, std::allocator&lt;void&gt; &gt;::dummy::*)()) &lt;built-in&gt;
C:/Boost/include/boost-1_33_1/boost/function/function_base.hpp:601: note:                
 typename boost::enable_if_c&lt; boost::type_traits::ice_not&lt; 
boost::is_integral&lt;T&gt;::value&gt;::value, bool&gt;::type boost::operator==(const 
boost::function_base&amp;, Functor) [with Functor = boost::function&lt;void ()(), 
std::allocator&lt;void&gt; &gt;]
C:/Boost/include/boost-1_33_1/boost/function/function_base.hpp:610: note:                
 typename boost::enable_if_c&lt; boost::type_traits::ice_not&lt; 
boost::is_integral&lt;T&gt;::value&gt;::value, bool&gt;::type boost::operator==(Functor, 
const boost::function_base&amp;) [with Functor = boost::function&lt;void ()(), 
std::allocator&lt;void&gt; &gt;]
C:/Boost/include/boost-1_33_1/boost/function/function_template.hpp:590: note:                
 void boost::operator==(const boost::function0&lt;R, Allocator&gt;&amp;, const 
boost::function0&lt;R, Allocator&gt;&amp;) [with R = void, Allocator = 
std::allocator&lt;void&gt;]
</code></pre>
<p>Jetzt versteh ich gar nichts mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100510</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 15:59:27 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 15:59:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">find_if(v.begin(), v.end(), FuncEqual(f) );
</code></pre>
<p>Sry, wollte ich noch dazu-editieren, darf ich ja aber unregistriert nicht..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100511</guid><dc:creator><![CDATA[TheBigW@Work]]></dc:creator><pubDate>Wed, 19 Jul 2006 15:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 16:20:51 GMT]]></title><description><![CDATA[<p>Ne, das klappt auch nicht, die fetten Fehler treten ja schon bei der Klasse auf. (Zeile 13)</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100526</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 16:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 18:50:10 GMT]]></title><description><![CDATA[<p>Das Problem liegt eigentlich sogar schon dort, dass ich nichtmal 2 boost::function-Objekte mit dem operator== vergleichen kann, obwohl dies in der Doku so beschrieben wird.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;boost/function.hpp&gt;

int main()
{
    boost::function&lt;void()&gt; f1;
    boost::function&lt;void()&gt; f2;

    std::cout &lt;&lt; (f1 == f2);
}
</code></pre>
<pre><code>main5.cpp:12: error: ambiguous overload for 'operator==' in 'f1 == f2'
</code></pre>
<p>Ich hoffe ihr könnt mir helfen, ich bin am verzweifeln!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100596</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 18:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 19:09:04 GMT]]></title><description><![CDATA[<p>boost::signals</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100607</guid><dc:creator><![CDATA[......]]></dc:creator><pubDate>Wed, 19 Jul 2006 19:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 19:37:05 GMT]]></title><description><![CDATA[<p>...... schrieb:</p>
<blockquote>
<p>boost::signals</p>
</blockquote>
<p>Das Problem ist nur, das dieser Vektor aus Funktionszeigern nochmal in einer Map liegt. boost::signals geht da leider net, das es ja noncopyable ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100623</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 19:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 19:49:47 GMT]]></title><description><![CDATA[<p>Ich hab's jetzt doch mit boost::signal gemacht und als Value nen boost::share_ptr&lt;boost::signal&lt;void()&gt; &gt; genommen. War nen bisschen aufwändiger, aber jetzt klappt's. Mich wundert's aber immernoch warum das mit den operator== von den boost::functions nicht geklappt hat...</p>
<p>mfg.</p>
<p>PS: Danke nochmal für den Tipp mit signal, scheint echt praktisch zu sein die Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100624</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 19 Jul 2006 19:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Wed, 19 Jul 2006 22:40:26 GMT]]></title><description><![CDATA[<p>Ich konnte es nicht glauben und habe es selbst getestet und ich bekomme kein Programm zum laufen, das zwei boost::functions (boost::function&lt; void() &gt; in meinem Fall) vergleicht, da op== mehrdeutig ist.<br />
Kann jemand ein funktionsfähiges Beispiel liefern, das op== verwendet _und_ kompilierbar ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100693</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Wed, 19 Jul 2006 22:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Thu, 20 Jul 2006 07:55:40 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Das Problem liegt eigentlich sogar schon dort, dass ich nichtmal 2 boost::function-Objekte mit dem operator== vergleichen kann, obwohl dies in der Doku so beschrieben wird.</p>
</blockquote>
<p>Wo wird das beschrieben? Soweit ich weiß kann man nur Funktionen/Funktionsobjekte mit Function-Wrappern vergleichen.<br />
Sprich:<br />
OK:</p>
<pre><code class="language-cpp">void f();

boost::function&lt;void()&gt; fr = f;
assert(fr == f);
</code></pre>
<p>Geht nicht:</p>
<pre><code class="language-cpp">void f();
boost::function&lt;void()&gt; fr = f;
boost::function&lt;void()&gt; fr2 = f;
assert(fr == fr2);
</code></pre>
<p>Dein find_if-Code könnte somit so aussehen (ungetestet):</p>
<pre><code class="language-cpp">void f() {}
void g() {}
template &lt;class T&gt;
struct FnEq {
  FnEq(T f) : f_(f) {}
  template &lt;class FnRef&gt;
  bool operator()(const FnRef&amp; f) const {
    return f == f_;
  }
  T f_;
};
template &lt;class T&gt;
FnEq&lt;T&gt; fnEq(T f) {
  return FnEq&lt;T&gt;(f);
}

int main() {
  typedef std::vector&lt;boost::function&lt;void()&gt; &gt; Funcs;
  Funcs funcs;
  funcs.push_back(f);
  funcs.push_back(g);
  Funcs::iterator it = std::find_if(funcs.begin(), funcs.end(), fnEq(f));
  assert(it != funcs.end());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1100813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100813</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 20 Jul 2006 07:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Thu, 20 Jul 2006 09:20:22 GMT]]></title><description><![CDATA[<p>Stimmt hast recht, ich hab mich verlesen. Aber warum kann man nicht zwei boost::function-Objekte vergleichen? Ist doch voll wichtig, oder nicht?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100886</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 20 Jul 2006 09:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Thu, 20 Jul 2006 11:46:51 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Stimmt hast recht, ich hab mich verlesen. Aber warum kann man nicht zwei boost::function-Objekte vergleichen?</p>
</blockquote>
<p>Das ist übrigens eines boost::function FAQ. Die Antwort findest du hier:<br />
<a href="http://www.boost.org/doc/html/function/faq.html#id2699084" rel="nofollow">http://www.boost.org/doc/html/function/faq.html#id2699084</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101099</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 20 Jul 2006 11:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Thu, 20 Jul 2006 11:54:03 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ... ich finde die FAQ sehr komisch. Also ich würde zumindest eine andere Semantik erwarten. Was interessieren mich die Typen? Ich erwarte Gleichheit, wenn die beiden Funktionen die selbe Funktion referenzieren. Im Prinzip wäre schon ein Adressvergleich des Funktionszeigers hilfreich. Natürlich ist auch das problematisch, wenn wir ein Funktions/objekt/ verwenden, welches keinen operator== implementiert. Aber dann wäre die Begründung eine ganz andere und ich denke selbst hier könnte man mit RTTI evtl. noch einen Vergleich zustande bekommen. Vielleicht auch nicht. Na ja ...</p>
<p>[EDIT]<br />
Uh ... ok, vergesst das. Ich habe mich verlesen. Die FAQ ist OK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101112</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 20 Jul 2006 11:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to find() mit std::vector&amp;lt;boost::function&amp;lt;void()&amp;gt; &amp;gt; on Thu, 20 Jul 2006 12:11:05 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>joomoo schrieb:</p>
<blockquote>
<p>Stimmt hast recht, ich hab mich verlesen. Aber warum kann man nicht zwei boost::function-Objekte vergleichen?</p>
</blockquote>
<p>Das ist übrigens eines boost::function FAQ. Die Antwort findest du hier:<br />
<a href="http://www.boost.org/doc/html/function/faq.html#id2699084" rel="nofollow">http://www.boost.org/doc/html/function/faq.html#id2699084</a></p>
</blockquote>
<p>Danke für den Link. Ich weiß nun auch, dass man boost::signal nehmen muss fürn std::vector&lt;boost::function&lt;...&gt; &gt;.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101148</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 20 Jul 2006 12:11:05 GMT</pubDate></item></channel></rss>