<?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[Frage zu boost::bind und Parameter]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;boost/bind.hpp&gt;
#include &lt;boost/function.hpp&gt;
#include &lt;iostream&gt;

namespace Hero{
	enum Enum
	{
		John,
		Clint,
		Henry
	};
}
typedef boost::function1&lt;void,Hero::Enum&gt; HeroSelectorFunction;

class HeroSelector
{
public:
	HeroSelector()
	{
		HeroSelectorFunction myHero =boost::bind(&amp;HeroSelector::Select,this,_1);
		myHero(Hero::Clint);

		myHero =boost::bind(&amp;HeroSelector::SelectClint,this);
		myHero(Hero::John);
	}
	void SelectClint()
	{
		std::cout &lt;&lt; &quot;always select clint&quot; &lt;&lt; std::endl;
	}
	void Select(Hero::Enum hero)
	{
		std::cout &lt;&lt; &quot;selected &quot; &lt;&lt; hero &lt;&lt; std::endl;
	}
};
int main()
{
	HeroSelector selector;
	return 0;
}
</code></pre>
<p>Der Code lässt sich mit MSVC9 fehlerfrei übersetzen und ausführen.</p>
<p>Die boost::function1 schreibt doch einen Parameter vor. Warum kann dann eine parameterlose Memberfunktion gebunden werden? Führt so eine Verwendung zu Problemen, weil das teilweise schon praktisch wäre?</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235186/frage-zu-boost-bind-und-parameter</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 22:33:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235186.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Feb 2009 17:00:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Thu, 26 Feb 2009 17:00:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;boost/bind.hpp&gt;
#include &lt;boost/function.hpp&gt;
#include &lt;iostream&gt;

namespace Hero{
	enum Enum
	{
		John,
		Clint,
		Henry
	};
}
typedef boost::function1&lt;void,Hero::Enum&gt; HeroSelectorFunction;

class HeroSelector
{
public:
	HeroSelector()
	{
		HeroSelectorFunction myHero =boost::bind(&amp;HeroSelector::Select,this,_1);
		myHero(Hero::Clint);

		myHero =boost::bind(&amp;HeroSelector::SelectClint,this);
		myHero(Hero::John);
	}
	void SelectClint()
	{
		std::cout &lt;&lt; &quot;always select clint&quot; &lt;&lt; std::endl;
	}
	void Select(Hero::Enum hero)
	{
		std::cout &lt;&lt; &quot;selected &quot; &lt;&lt; hero &lt;&lt; std::endl;
	}
};
int main()
{
	HeroSelector selector;
	return 0;
}
</code></pre>
<p>Der Code lässt sich mit MSVC9 fehlerfrei übersetzen und ausführen.</p>
<p>Die boost::function1 schreibt doch einen Parameter vor. Warum kann dann eine parameterlose Memberfunktion gebunden werden? Führt so eine Verwendung zu Problemen, weil das teilweise schon praktisch wäre?</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1670809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1670809</guid><dc:creator><![CDATA[TheManWithNoName]]></dc:creator><pubDate>Thu, 26 Feb 2009 17:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 02 Mar 2009 12:03:07 GMT]]></title><description><![CDATA[<p>Weiß keiner warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672759</guid><dc:creator><![CDATA[TheManWithNoName]]></dc:creator><pubDate>Mon, 02 Mar 2009 12:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 02 Mar 2009 12:13:47 GMT]]></title><description><![CDATA[<p>TheManWithNoName schrieb:</p>
<blockquote>
<p>Weiß keiner warum?</p>
</blockquote>
<p>Mir erscheint das komisch. Ich würde da mal in der boost-Mailingliste nachfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672767</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 02 Mar 2009 12:13:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 02 Mar 2009 13:58:10 GMT]]></title><description><![CDATA[<p>*gelöscht*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672824</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Mon, 02 Mar 2009 13:58:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Sun, 12 Apr 2009 22:23:22 GMT]]></title><description><![CDATA[<p>Ich hätte da noch eine Frage:</p>
<p>Mit der Spriti-Libary habe ich mir folgende Grammtik definiert und mit bind will ich eben den real_p-Parameter an eine Memberfunktion einer Klasse übergeben. Dieser Code funktioniert mal:</p>
<pre><code>...            
(
   &quot;open(&quot; &gt;&gt; real_p[bind(&amp;self_t::open, this, _1)] &gt;&gt; &quot;);&quot; &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
<p>Aber wie schaffe ich es hier jetzt ZWEI Parameter anzugeben? Also die open-Funktion des geparsten Textes soll noch einen zweiten Parameter haben, ich habe es so in etwas versucht, hat aber nicht geklappt...</p>
<pre><code>...            
(
   &quot;open(&quot; &gt;&gt; real_p &gt;&gt;&quot;,&quot; &gt;&gt; real_p[bind(&amp;self_t::open, this, _1, _2)] &gt;&gt; &quot;);&quot; &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
<p>Kann mir hier jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695059</guid><dc:creator><![CDATA[Reinoslav1]]></dc:creator><pubDate>Sun, 12 Apr 2009 22:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Sun, 12 Apr 2009 22:52:05 GMT]]></title><description><![CDATA[<p>Reinoslav1 schrieb:</p>
<blockquote>
<p>Aber wie schaffe ich es hier jetzt ZWEI Parameter anzugeben? Also die open-Funktion des geparsten Textes soll noch einen zweiten Parameter haben, ich habe es so in etwas versucht, hat aber nicht geklappt...</p>
<pre><code>...            
(
   &quot;open(&quot; &gt;&gt; real_p &gt;&gt;&quot;,&quot; &gt;&gt; real_p[bind(&amp;self_t::open, this, _1, _2)] &gt;&gt; &quot;);&quot; &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
</blockquote>
<p>Was erwartest du denn als zweiten Parameter? Der erste ist ja die Zahl, die real_p gelesen hat. Aber wo soll da ein zweiter Wert herkommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695061</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 12 Apr 2009 22:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Sun, 12 Apr 2009 23:16:13 GMT]]></title><description><![CDATA[<p>Das ist schon richtig so. Mit boost::bind kann man eben auch Parameter verwerfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695071</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Sun, 12 Apr 2009 23:16:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 00:29:23 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>Das ist schon richtig so. Mit boost::bind kann man eben auch Parameter verwerfen.</p>
</blockquote>
<p>Vielleicht stehe ich gerade einfach total auf dem Schlauch, aber hier wird doch kein Parameter verworfen, sondern &quot;dazuerfunden&quot;, oder?</p>
<p>Die Semantic Action zu real_p muß ein Funktionsobjekt mit einem Parameter sein. Wenn die gebundene Funktion tatsächlich zwei Parameter hat, dann kann der zweite (bzw. einer davon) doch nur eine Konstante o.ä. sein, aber kein Platzhalter wie _2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695079</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 13 Apr 2009 00:29:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 08:24:24 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Reinoslav1 schrieb:</p>
<blockquote>
<p>Aber wie schaffe ich es hier jetzt ZWEI Parameter anzugeben? Also die open-Funktion des geparsten Textes soll noch einen zweiten Parameter haben, ich habe es so in etwas versucht, hat aber nicht geklappt...</p>
<pre><code>...            
(
   &quot;open(&quot; &gt;&gt; real_p &gt;&gt;&quot;,&quot; &gt;&gt; real_p[bind(&amp;self_t::open, this, _1, _2)] &gt;&gt; &quot;);&quot; &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
</blockquote>
<p>Was erwartest du denn als zweiten Parameter? Der erste ist ja die Zahl, die real_p gelesen hat. Aber wo soll da ein zweiter Wert herkommen?</p>
</blockquote>
<p>Wie schon gesagt, ich habe es nur so geschrieben, weil ich keine Ahnung habe wie ich hier den zweiten Parameter binden könnte! Wie sollte das mit dem zweiten Parameter sonst funktionieren? Mit einem zweiten bind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695115</guid><dc:creator><![CDATA[Reinoslav1]]></dc:creator><pubDate>Mon, 13 Apr 2009 08:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 10:09:11 GMT]]></title><description><![CDATA[<p>Reinoslav1 schrieb:</p>
<blockquote>
<p>Wie schon gesagt, ich habe es nur so geschrieben, weil ich keine Ahnung habe wie ich hier den zweiten Parameter binden könnte! Wie sollte das mit dem zweiten Parameter sonst funktionieren? Mit einem zweiten bind?</p>
</blockquote>
<p>Eben da wäre die Frage, was du gerne als zweiten Parameter hättest. Möglich ist es z.B., Literale anzugeben:</p>
<pre><code class="language-cpp">bind(&amp;self_t::open, this, _1, 42)
</code></pre>
<p>Du kannst aber auch beispielsweise Referenzen auf Variablen benutzen:</p>
<pre><code class="language-cpp">int x;
...
bind(&amp;self_t::open, this, _1, ref(x))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1695162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695162</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 13 Apr 2009 10:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 10:55:38 GMT]]></title><description><![CDATA[<p>Ich habe z.B. folgenden Text zu parsen:</p>
<p>open(1,2);commit();</p>
<p>Diesen möchte ich mit folgender Grammatik parsen:</p>
<pre><code>...            
(
   &quot;open(&quot; &gt;&gt; real_p &gt;&gt;&quot;,&quot; &gt;&gt; real_p &gt;&gt; &quot;);&quot; &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
<p>Das funktioniert auch. Jetzt habe ich eine Member-Funktion:</p>
<pre><code>void open(double n1, double n2)
</code></pre>
<p>, welche ich an die Grammatik binden möchte. Also wenn ich &quot;open(1,2);commit();&quot; parse, dann soll n1 = 1 und n2 = 2 sein. Wie geht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695179</guid><dc:creator><![CDATA[Reinoslav1]]></dc:creator><pubDate>Mon, 13 Apr 2009 10:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 18:37:15 GMT]]></title><description><![CDATA[<p>Wieso funktioniert eigentlich folgende Code nicht?</p>
<pre><code>...            
(
   [b]([/b]&quot;open(&quot; &gt;&gt; real_p &gt;&gt;&quot;,&quot; &gt;&gt; real_p &gt;&gt; &quot;);&quot;[b])[bind(&amp;self_t::open, this, _1)][/b] &gt;&gt;
   &quot;commit();&quot;
)
...
</code></pre>
<p>Also ich habe hier ein Klammer gesetzt und dann die semantic action, weil ich will, dass das bind erst aufgerufen wird, wenn der komplete open(x,x); befehl erfolgreich geparst wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695331</guid><dc:creator><![CDATA[Reinoslav1]]></dc:creator><pubDate>Mon, 13 Apr 2009 18:37:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 18:40:46 GMT]]></title><description><![CDATA[<p>Also eigentlich möchte ich im Endeffekt jetzt folgende Grammatik:</p>
<pre><code>int i,j;

...

(
   (&quot;open(&quot; &gt;&gt; real_p[assign_a(i)] &gt;&gt; &quot;,&quot; &gt;&gt; real_p[assign_a(j)] &gt;&gt; &quot;);&quot;)[bind(&amp;self_t::open, this, i, j)] &gt;&gt;
   &quot;commit();&quot;
)
</code></pre>
<p>Aber irgendwie funktioniert das gar nicht! Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695332</guid><dc:creator><![CDATA[Reinoslav1]]></dc:creator><pubDate>Mon, 13 Apr 2009 18:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::bind und Parameter on Mon, 13 Apr 2009 20:46:03 GMT]]></title><description><![CDATA[<p>Reinoslav1 schrieb:</p>
<blockquote>
<p>Also eigentlich möchte ich im Endeffekt jetzt folgende Grammatik:</p>
<pre><code>int i,j;

...

(
   (&quot;open(&quot; &gt;&gt; real_p[assign_a(i)] &gt;&gt; &quot;,&quot; &gt;&gt; real_p[assign_a(j)] &gt;&gt; &quot;);&quot;)[bind(&amp;self_t::open, this, i, j)] &gt;&gt;
   &quot;commit();&quot;
)
</code></pre>
<p>Aber irgendwie funktioniert das gar nicht! Warum?</p>
</blockquote>
<p>Der Ansatz müßte soweit stimmen. Einen &quot;direkteren&quot; Weg, die open-Funktion mit den beiden Werten aufzurufen, gibt es meines Wissens nicht.</p>
<p>So wie es da jetzt steht, wird die Funktion aber mit den Werten von i und j aufgerufen, die diese zum Zeitpunkt des bind-Aufrufs haben. Was du brauchst sind also nicht die Werte der Variablen, sondern Referenzen darauf. In etwa so müßte das gehen:</p>
<pre><code class="language-cpp">bind(&amp;self_t::open, this, boost::ref(i), boost::ref(j))
</code></pre>
<p>Ach ja, noch was: wenn du die Werte sowieso als Integers speicherst, wäre es dann nicht sinnvoller, int_p anstelle von real_p zu benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1695403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1695403</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 13 Apr 2009 20:46:03 GMT</pubDate></item></channel></rss>