<?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[std::function und std::string::find]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade folgendes, aber der Compiler akzeptiert das nicht:<br />
Ich habe folgendes <a href="http://de.cppreference.com/w/cpp/utility/functional/function" rel="nofollow">http://de.cppreference.com/w/cpp/utility/functional/function</a> Beispiel verwendet (// store a call to a member function):</p>
<pre><code>std::function&lt;std::string::size_type(const std::string&amp;, const ::std::string&amp;)&gt;my_func = &amp;std::string::find;
</code></pre>
<p>Ich bekomme folgende Fehlermeldung:</p>
<pre><code>Error	3	error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'std::function&lt;unsigned int (const std::string &amp;,const std::string &amp;)&gt;'
</code></pre>
<p>Was mache ich falsch?<br />
<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/topic/330669/std-function-und-std-string-find</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 01:58:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330669.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Jan 2015 08:23:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::function und std::string::find on Wed, 21 Jan 2015 08:23:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade folgendes, aber der Compiler akzeptiert das nicht:<br />
Ich habe folgendes <a href="http://de.cppreference.com/w/cpp/utility/functional/function" rel="nofollow">http://de.cppreference.com/w/cpp/utility/functional/function</a> Beispiel verwendet (// store a call to a member function):</p>
<pre><code>std::function&lt;std::string::size_type(const std::string&amp;, const ::std::string&amp;)&gt;my_func = &amp;std::string::find;
</code></pre>
<p>Ich bekomme folgende Fehlermeldung:</p>
<pre><code>Error	3	error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'std::function&lt;unsigned int (const std::string &amp;,const std::string &amp;)&gt;'
</code></pre>
<p>Was mache ich falsch?<br />
<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/2438769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438769</guid><dc:creator><![CDATA[OutOfRageException]]></dc:creator><pubDate>Wed, 21 Jan 2015 08:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::function und std::string::find on Wed, 21 Jan 2015 08:53:47 GMT]]></title><description><![CDATA[<p>1. Es gibt keine <code>std::string::find(..)</code> Funktion mit der Signatur <code>std::string::size_type(const std::string&amp;, const ::std::string&amp;)</code><br />
2. <code>std::string::find(..)</code> ist eine Instanz-Funktion, d.h. sie muss mit einem Objekt aufgerufen werden.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Benutze <code>std::bind(..)</code></p>
<p>Edit:<br />
...gar nicht so einfach, habe versucht ein Bsp. zu machen... ich würde dir empfehlen zuerst ein einfacheres Bsp. zu nehmen... auch ist der Praxisbezug fraglich... da würde man vermutlich gleich eine Lambda übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438771</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 21 Jan 2015 08:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to std::function und std::string::find on Wed, 21 Jan 2015 12:23:16 GMT]]></title><description><![CDATA[<p>Leider musst Du genau sagen, welche Überladung von <code>string::find()</code> Du haben willst. Also den Pointer casten.<br />
Und den dritten Paramter von <code>string::find()</code> nicht vergessen!</p>
<pre><code class="language-cpp">void f() {
  using namespace std;
  using size_type = string::size_type;
  function&lt;size_type(const string&amp;, const string&amp;, size_type)&gt; my_func =
    static_cast&lt;size_type(string::*)(const string&amp;, size_type)const&gt;(&amp;string::find);
  ...
}
</code></pre>
<p><em>ächz</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438820</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 21 Jan 2015 12:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::function und std::string::find on Wed, 21 Jan 2015 13:08:42 GMT]]></title><description><![CDATA[<p>Komisch eigentlich, dass es kein make_function gibt. Dann könnte man sich das doppelte Ausschreiben des Typs sparen.</p>
<p>ungefähr</p>
<pre><code class="language-cpp">template &lt;typename R, typename... Args&gt;
auto make_function(R(*f)(Args...)) { return std::function&lt;R(Args...)&gt;(f); }
template &lt;typename R, typename C, typename... Args&gt;
auto make_function(R(C::*f)(Args...)) { return std::function&lt;R(C&amp;, Args...)&gt;(f); }
template &lt;typename R, typename C, typename... Args&gt;
auto make_function(R(C::*f)(Args...)const) { return std::function&lt;R(const C&amp;, Args...)&gt;(f); }
template &lt;typename R, typename C, typename... Args&gt;
auto make_function(R(C::*f)(Args...)volatile) { return std::function&lt;R(volatile C&amp;, Args...)&gt;(f); }
template &lt;typename R, typename C, typename... Args&gt;
auto make_function(R(C::*f)(Args...)const volatile) { return std::function&lt;R(const volatile C&amp;, Args...)&gt;(f); }
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">void f() {
  using namespace std;
  using size_type = string::size_type;
  auto my_func = make_function(static_cast&lt;size_type(string::*)(const string&amp;, size_type)const&gt;(&amp;string::find));
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2438832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438832</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 21 Jan 2015 13:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::function und std::string::find on Wed, 21 Jan 2015 17:23:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Da muss noch ein wenig mehr berücksichtigt werden. Ich habe ein Makro dafür <a href="http://stackoverflow.com/questions/27743745/stripping-all-qualifiers-from-a-function-type" rel="nofollow">hier</a> vorgegeben. Wenn wir das ein wenig umschreiben, bekommen wir's:</p>
<pre><code>#define REM_CTOR(...) __VA_ARGS__

template &lt;typename T, typename R&gt;
using helper_ = std::conditional_t&lt;std::is_rvalue_reference&lt;R&gt;{}, T&amp;&amp;, T&amp;&gt;;

#define SPEC(var, cv, ref) \
template &lt;typename R, typename C, typename... Args&gt; \
struct get_std_function&lt;R(C::*)(Args... REM_CTOR var) cv ref &gt; \
{using type = std::function&lt;R(helper_&lt;C cv, int ref&gt;, Args... REM_CTOR var)&gt;;};

#define REF(var, cv) SPEC(var, cv,) SPEC(var, cv, &amp;) SPEC(var, cv, &amp;&amp;)

#define CV(var) REF(var,) REF(var, const) \
                REF(var, volatile) REF(var, const volatile)

template &lt;typename&gt; struct get_std_function;

CV(()) CV((,...))
</code></pre>
<p><a href="http://coliru.stacked-crooked.com/a/0cadd2c6d107ebb9" rel="nofollow"><strong>Demo</strong></a>.</p>
<p>( <code>make_function</code> reduziert sich dann auf</p>
<pre><code>template &lt;typename T&gt;
auto make_function(T t) { return get_std_function&lt;T&gt;::type(f); }
</code></pre>
<p>)</p>
<p>PS: Wo SO schon verlinkt ist: Wer bist du dort? Ich kann es leider nicht erschließen. Ich vermute derjenige der oben die Frage gestellt hat (T.C.), oder hvd.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438888</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 21 Jan 2015 17:23:52 GMT</pubDate></item></channel></rss>