<?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[bind1st für Funktoren]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe mir std::function selbst implementiert und bastle gerade an einem bind1st. Für Funktionen habe ich die Überladung schon hinbekommen, aber für Funktoren fällt mir da nichts sinnvolles ein. Auf variadic arguments kann ich ja kein typedef machen, ich habe den Tipp bekommen, mir folgende leere struct zu bauen und darauf zu typedefen:</p>
<pre><code class="language-cpp">template &lt;typename... Args&gt; struct pack {};
</code></pre>
<p>Irgendwie hilft mir das auch nicht weiter.</p>
<p>Mein bind1st für Funktionen:</p>
<pre><code class="language-cpp">template &lt;typename ReturnType, typename BoundType, typename... ArgumentTypes&gt;
        class binder1st
        {
                function&lt;ReturnType(BoundType, ArgumentTypes...)&gt; functor;
                typename std::remove_reference&lt;BoundType&gt;::type value;

        public:
                binder1st(function&lt;ReturnType(BoundType, ArgumentTypes...)&gt; f, BoundType&amp;&amp; val) : functor(f), value(std::forward&lt;BoundType&gt;(val)) {}

                ReturnType operator () (ArgumentTypes&amp;&amp;... args)
                {
                        return functor(value, std::forward&lt;ArgumentTypes&gt;(args)...);
                }
        };

        template &lt;typename T, typename ReturnType, typename BinderType, typename... ArgumentTypes&gt;
        binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt; bind1st(ReturnType (*f) (BinderType, ArgumentTypes...), T&amp;&amp; value)
        {
                return binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt;(function&lt;ReturnType(BinderType, ArgumentTypes...)&gt;(f), std::forward&lt;T&gt;(value));
        }
</code></pre>
<p>Kann mir jemand weiterhelfen?</p>
<p>Grüße, PI</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283134/bind1st-für-funktoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 18:25:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283134.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Mar 2011 19:55:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 19:55:23 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe mir std::function selbst implementiert und bastle gerade an einem bind1st. Für Funktionen habe ich die Überladung schon hinbekommen, aber für Funktoren fällt mir da nichts sinnvolles ein. Auf variadic arguments kann ich ja kein typedef machen, ich habe den Tipp bekommen, mir folgende leere struct zu bauen und darauf zu typedefen:</p>
<pre><code class="language-cpp">template &lt;typename... Args&gt; struct pack {};
</code></pre>
<p>Irgendwie hilft mir das auch nicht weiter.</p>
<p>Mein bind1st für Funktionen:</p>
<pre><code class="language-cpp">template &lt;typename ReturnType, typename BoundType, typename... ArgumentTypes&gt;
        class binder1st
        {
                function&lt;ReturnType(BoundType, ArgumentTypes...)&gt; functor;
                typename std::remove_reference&lt;BoundType&gt;::type value;

        public:
                binder1st(function&lt;ReturnType(BoundType, ArgumentTypes...)&gt; f, BoundType&amp;&amp; val) : functor(f), value(std::forward&lt;BoundType&gt;(val)) {}

                ReturnType operator () (ArgumentTypes&amp;&amp;... args)
                {
                        return functor(value, std::forward&lt;ArgumentTypes&gt;(args)...);
                }
        };

        template &lt;typename T, typename ReturnType, typename BinderType, typename... ArgumentTypes&gt;
        binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt; bind1st(ReturnType (*f) (BinderType, ArgumentTypes...), T&amp;&amp; value)
        {
                return binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt;(function&lt;ReturnType(BinderType, ArgumentTypes...)&gt;(f), std::forward&lt;T&gt;(value));
        }
</code></pre>
<p>Kann mir jemand weiterhelfen?</p>
<p>Grüße, PI</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030275</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 05 Mar 2011 19:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 20:45:31 GMT]]></title><description><![CDATA[<p>Habe nun auch noch eine Überladung für function:</p>
<pre><code class="language-cpp">template &lt;typename T, typename ReturnType, typename BinderType, typename... ArgumentTypes&gt;
        binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt; bind1st(function&lt;ReturnType(BinderType, ArgumentTypes...)&gt; f, T&amp;&amp; value)
        {
                return binder1st&lt;ReturnType, BinderType, ArgumentTypes...&gt;(f, std::forward&lt;T&gt;(value));
        }
</code></pre>
<p>Ist es überhaupt machbar, beliebige Funktoren zu binden? Schließlich komm man ja nicht an die Typen des operator () ran, oder? Bei typedefs in den Funktoren kommt wieder das oben genannte Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030283</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 05 Mar 2011 20:45:31 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:15:01 GMT]]></title><description><![CDATA[<p>Du kennst aber std::bind? Vielleicht mal das anschauen.</p>
<p>Btw: Die Boost-Menschen haben sowas schon vor fast einem Jahrzehnt hingekriegt. Ganz ohne Variadic Templates... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030302</guid><dc:creator><![CDATA[Buchbinder]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:15:01 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:17:53 GMT]]></title><description><![CDATA[<p>Mach operator () zu einem Template, dann sind die Argument-Types völlig Hupe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030303</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:18:22 GMT]]></title><description><![CDATA[<p>Natürlich kenn ich std::bind, ich will aber erst mal das implementieren. Das Ziel ist es, das ganze mit einer beliebigen Anzahl an Parametern zu verwenden können, das haben die sicherlich nicht so hinbekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030304</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:20:06 GMT]]></title><description><![CDATA[<p>Buchbinder schrieb:</p>
<blockquote>
<p>Btw: Die Boost-Menschen haben sowas schon vor fast einem Jahrzehnt hingekriegt. Ganz ohne Variadic Templates... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ja, aber auch nur weil sie genau das gemacht haben, zu dessen Vermeidung/Umgehung Variadic Templates gemacht wurden: tonnenweise Code wiederholen.</p>
<p>Die Funktoren die boost::bind() und Konsorten zurückliefern überladen den operator () einfach zigfach - einen ohne Parameter, einen mit einem Parameter ... einen mit 20 Parametern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030305</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:22:49 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ist es überhaupt machbar, beliebige Funktoren zu binden?</p>
</blockquote>
<p>Ja, ist es, wie hab' ich ja schon geschrieben.</p>
<blockquote>
<p>Schließlich komm man ja nicht an die Typen des operator () ran, oder?</p>
</blockquote>
<p>Ne, kann nicht gehen, weil es mehr als einen operator () geben kann - der kann ja wie jede andere Funktion auch überladen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030307</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to bind1st für Funktoren on Sat, 05 Mar 2011 22:36:17 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Mach operator () zu einem Template, dann sind die Argument-Types völlig Hupe.</p>
</blockquote>
<p>Der Tipp ist schon mal super, warum ich da nicht draufgekommen bin. Allerdings bekomme ich hier eine Reihe Fehler, die ich nicht deuten kann. Der vollständigkeit halber ist alles dabei, um das Beispiel kompilierbar zu halten:<br />
<a href="http://ideone.com/BFkvs" rel="nofollow">http://ideone.com/BFkvs</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2030313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2030313</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 05 Mar 2011 22:36:17 GMT</pubDate></item></channel></rss>