<?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[Funktionspointer auf statische Klassenmethode in STL map]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>in der Funktion</p>
<pre><code>void Pointer::callFunction(std::string functionName)
</code></pre>
<p>möchte ich vor dem Funktionsaufruf</p>
<pre><code>Pointer::functions[functionName]();
</code></pre>
<p>abfragen ob diese existiert, da ich sonst das Programm &quot;zerstöre&quot;.</p>
<p>Folgende Klasse in Pointer.h</p>
<pre><code>#include&lt;map&gt;
#include&lt;string&gt;
#include&lt;iostream&gt;

class Pointer
{
private: static std::map&lt;std::string,void(*)(void)&gt; functions;
private: static int isInitialized;
private: static int intilizeFunctions(void);

// functions to be called by a string identifier
private: static void functionA(void);
private: static void functionB(void);
private: static void functionC(void);
private: static void functionD(void);

public: static void callFunction(std::string functionName);
};

// initialize static class members
std::map&lt;std::string,void(*)(void)&gt; Pointer::functions;
int Pointer::isInitialized = intilizeFunctions();

// define static class methods
void Pointer::functionA(void){std::cout&lt;&lt;&quot;functionA&quot;&lt;&lt;std::endl;}
void Pointer::functionB(void){std::cout&lt;&lt;&quot;functionB&quot;&lt;&lt;std::endl;}
void Pointer::functionC(void){std::cout&lt;&lt;&quot;functionC&quot;&lt;&lt;std::endl;}
void Pointer::functionD(void){std::cout&lt;&lt;&quot;functionD&quot;&lt;&lt;std::endl;}

// initializes function pointer map; must be compilable
int Pointer::intilizeFunctions(void)
{
  functions[&quot;a&quot;] = functionA;
  functions[&quot;b&quot;] = functionB;
  functions[&quot;c&quot;] = functionC;
  functions[&quot;d&quot;] = functionD;
  return 1;
}

void Pointer::callFunction(std::string functionName)
{
  if(functions.find(functionName) != Pointer::functions.end)
    Pointer::functions[functionName]();
}
</code></pre>
<p>Bei dem Ausdruck</p>
<pre><code>if(functions.find(functionName) != Pointer::functions.end)
</code></pre>
<p>bekomme ich folgende Fehlermeldung:</p>
<blockquote>
<p>42 U:\Dropbox\Windows\Desktop\pointer\Pointer.h no match for 'operator!=' in '(&amp;Pointer::functions)-&gt;std::map&lt;_Key, _Tp, _Compare, _Alloc&gt;::find [with _Key = std::string, _Tp = void (<em>)(), _Compare = std::less<a href="std::string" rel="nofollow">std::string</a>, _Alloc = std::allocator&lt;std::pair&lt;const std::string, void (</em>)()&gt; &gt;](((const std::string&amp;)((const std::string*)(&amp;functionName)))) != Pointer::functions.std::map&lt;_Key, _Tp, _Compare, _Alloc&gt;::end [with _Key = std::string, _Tp = void (<em>)(), _Compare = std::less<a href="std::string" rel="nofollow">std::string</a>, _Alloc = std::allocator&lt;std::pair&lt;const std::string, void (</em>)()&gt; &gt;]'</p>
</blockquote>
<p>und folgenden Hinweis:</p>
<blockquote>
<p>note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_tree.h:213 candidates are: bool std::_Rb_tree_iterator&lt;_Tp&gt;::operator!=(const std::_Rb_tree_iterator&lt;_Tp&gt;&amp;) const [with _Tp = std::pair&lt;const std::string, void (*)()&gt;]</p>
</blockquote>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank für eure Unterstützung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314409/funktionspointer-auf-statische-klassenmethode-in-stl-map</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 05:38:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314409.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Mar 2013 13:16:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionspointer auf statische Klassenmethode in STL map on Fri, 01 Mar 2013 13:16:27 GMT]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>in der Funktion</p>
<pre><code>void Pointer::callFunction(std::string functionName)
</code></pre>
<p>möchte ich vor dem Funktionsaufruf</p>
<pre><code>Pointer::functions[functionName]();
</code></pre>
<p>abfragen ob diese existiert, da ich sonst das Programm &quot;zerstöre&quot;.</p>
<p>Folgende Klasse in Pointer.h</p>
<pre><code>#include&lt;map&gt;
#include&lt;string&gt;
#include&lt;iostream&gt;

class Pointer
{
private: static std::map&lt;std::string,void(*)(void)&gt; functions;
private: static int isInitialized;
private: static int intilizeFunctions(void);

// functions to be called by a string identifier
private: static void functionA(void);
private: static void functionB(void);
private: static void functionC(void);
private: static void functionD(void);

public: static void callFunction(std::string functionName);
};

// initialize static class members
std::map&lt;std::string,void(*)(void)&gt; Pointer::functions;
int Pointer::isInitialized = intilizeFunctions();

// define static class methods
void Pointer::functionA(void){std::cout&lt;&lt;&quot;functionA&quot;&lt;&lt;std::endl;}
void Pointer::functionB(void){std::cout&lt;&lt;&quot;functionB&quot;&lt;&lt;std::endl;}
void Pointer::functionC(void){std::cout&lt;&lt;&quot;functionC&quot;&lt;&lt;std::endl;}
void Pointer::functionD(void){std::cout&lt;&lt;&quot;functionD&quot;&lt;&lt;std::endl;}

// initializes function pointer map; must be compilable
int Pointer::intilizeFunctions(void)
{
  functions[&quot;a&quot;] = functionA;
  functions[&quot;b&quot;] = functionB;
  functions[&quot;c&quot;] = functionC;
  functions[&quot;d&quot;] = functionD;
  return 1;
}

void Pointer::callFunction(std::string functionName)
{
  if(functions.find(functionName) != Pointer::functions.end)
    Pointer::functions[functionName]();
}
</code></pre>
<p>Bei dem Ausdruck</p>
<pre><code>if(functions.find(functionName) != Pointer::functions.end)
</code></pre>
<p>bekomme ich folgende Fehlermeldung:</p>
<blockquote>
<p>42 U:\Dropbox\Windows\Desktop\pointer\Pointer.h no match for 'operator!=' in '(&amp;Pointer::functions)-&gt;std::map&lt;_Key, _Tp, _Compare, _Alloc&gt;::find [with _Key = std::string, _Tp = void (<em>)(), _Compare = std::less<a href="std::string" rel="nofollow">std::string</a>, _Alloc = std::allocator&lt;std::pair&lt;const std::string, void (</em>)()&gt; &gt;](((const std::string&amp;)((const std::string*)(&amp;functionName)))) != Pointer::functions.std::map&lt;_Key, _Tp, _Compare, _Alloc&gt;::end [with _Key = std::string, _Tp = void (<em>)(), _Compare = std::less<a href="std::string" rel="nofollow">std::string</a>, _Alloc = std::allocator&lt;std::pair&lt;const std::string, void (</em>)()&gt; &gt;]'</p>
</blockquote>
<p>und folgenden Hinweis:</p>
<blockquote>
<p>note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_tree.h:213 candidates are: bool std::_Rb_tree_iterator&lt;_Tp&gt;::operator!=(const std::_Rb_tree_iterator&lt;_Tp&gt;&amp;) const [with _Tp = std::pair&lt;const std::string, void (*)()&gt;]</p>
</blockquote>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank für eure Unterstützung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2303304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303304</guid><dc:creator><![CDATA[VRComputing]]></dc:creator><pubDate>Fri, 01 Mar 2013 13:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer auf statische Klassenmethode in STL map on Fri, 01 Mar 2013 13:18:31 GMT]]></title><description><![CDATA[<p>end() ist eine Methode und keine Variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2303305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303305</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 01 Mar 2013 13:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer auf statische Klassenmethode in STL map on Fri, 01 Mar 2013 13:22:46 GMT]]></title><description><![CDATA[<p>Oh. Peinlich. Danke <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/2303307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303307</guid><dc:creator><![CDATA[VRComputing]]></dc:creator><pubDate>Fri, 01 Mar 2013 13:22:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer auf statische Klassenmethode in STL map on Fri, 01 Mar 2013 13:44:56 GMT]]></title><description><![CDATA[<p>Und jetzt setzt du dich mal hin und liest dir durch, wie Zugriffs-Spezifizierer in C++ funktionieren. Und danach Namespaces. Und danach, was (void) bedeutet. Und dann vergisst du mal dein Java-Zeugs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2303315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303315</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 01 Mar 2013 13:44:56 GMT</pubDate></item></channel></rss>