<?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[Methoden über String aufrufen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich fasse mich kurz:<br />
meine Anwendung besteht aus einer Eingabe, welche dann in einer Map die entsprechende Funktion rausfindet und aufruft. War bislang kein Problem und funktioniert auch, das Problem aber ist - ich will nun eine Methode innerhalb einer Klasse aufrufen, wobei diese Methoden auch in der Map sind.</p>
<p>Übergangsmäßig habe ich es mit &quot;Zwischenfunktionen&quot; gelöst, was aber leider nicht schön ist.</p>
<p>Hier mal der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;string&gt;
using namespace std;

class Woot {
public:
	int foo() {
		return 42;
	}
	int bar() {
		return 1337;
	}
};

Woot d;

int foo() { return d.foo(); }
int bar() { return d.bar(); }

int main() {
	map&lt;string, int(*)()&gt; m;
	m[&quot;foo&quot;] = &amp;foo;
	m[&quot;bar&quot;] = &amp;bar;

	string var;
	bool running = true;
	while(running) {
		cin &gt;&gt; var;

		if(var != &quot;quit&quot;) {
			if(m.count(var) != 0) {
				cout &lt;&lt; m[var]() &lt;&lt; endl;
			} else
				cout &lt;&lt; &quot;sie sack!&quot; &lt;&lt; endl;
		} else
			running = false;
	}
}
</code></pre>
<p>Ich will mir nun einfach die zwei Funktionen foo und bar schenken und direkt die Methoden aufrufen.</p>
<p>Danke schonmal</p>
<p>P.S. Ich programmiere normal kein C++, also nicht wundern.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303975/methoden-über-string-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 03:54:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303975.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 May 2012 17:49:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methoden über String aufrufen on Sat, 26 May 2012 17:49:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich fasse mich kurz:<br />
meine Anwendung besteht aus einer Eingabe, welche dann in einer Map die entsprechende Funktion rausfindet und aufruft. War bislang kein Problem und funktioniert auch, das Problem aber ist - ich will nun eine Methode innerhalb einer Klasse aufrufen, wobei diese Methoden auch in der Map sind.</p>
<p>Übergangsmäßig habe ich es mit &quot;Zwischenfunktionen&quot; gelöst, was aber leider nicht schön ist.</p>
<p>Hier mal der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;string&gt;
using namespace std;

class Woot {
public:
	int foo() {
		return 42;
	}
	int bar() {
		return 1337;
	}
};

Woot d;

int foo() { return d.foo(); }
int bar() { return d.bar(); }

int main() {
	map&lt;string, int(*)()&gt; m;
	m[&quot;foo&quot;] = &amp;foo;
	m[&quot;bar&quot;] = &amp;bar;

	string var;
	bool running = true;
	while(running) {
		cin &gt;&gt; var;

		if(var != &quot;quit&quot;) {
			if(m.count(var) != 0) {
				cout &lt;&lt; m[var]() &lt;&lt; endl;
			} else
				cout &lt;&lt; &quot;sie sack!&quot; &lt;&lt; endl;
		} else
			running = false;
	}
}
</code></pre>
<p>Ich will mir nun einfach die zwei Funktionen foo und bar schenken und direkt die Methoden aufrufen.</p>
<p>Danke schonmal</p>
<p>P.S. Ich programmiere normal kein C++, also nicht wundern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2215852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2215852</guid><dc:creator><![CDATA[Hendriks]]></dc:creator><pubDate>Sat, 26 May 2012 17:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden über String aufrufen on Sat, 26 May 2012 18:03:09 GMT]]></title><description><![CDATA[<p>Das Stichwort das du suchst ist <em>member function pointer</em>. Die genaue Umsetzung hängt davon ab, an welcher Stelle das aufrufende Woot bekannt ist. Du kannst sowohl einen blanken Zeiger in der map speichern und dann diesen zum<br />
Aufruf auf einem Woot-Objekt benutzen, als auch ein Proxyobjekt, welches sich ein bestimmtes Woot merkt und dann immer nur dieses benutzt. Ersteres findest du in Anleitungen zu member function pointers (oder falls dir jemand noch ein konkretes Beispiel gibt), für letzteres brauchst du zusätzlich noch die Hilfsfunktionen aus dem functional-Header. Dieser wurde in C++11 mit std::bind und std::function stark verbessert, falls möglich solltest du dies benutzen. In der Boost-Bibliothek gibt es auch etwas sehr ähnliches, falls C++11 nicht in Frage kommt. Die Funktionsobjekte und Bindefunktionen aus reinem C++98 sind dagegen die Seuche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2215855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2215855</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 26 May 2012 18:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden über String aufrufen on Mon, 28 May 2012 11:38:54 GMT]]></title><description><![CDATA[<p>Gefunden und geklappt, danke :)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216278</guid><dc:creator><![CDATA[Hendriks]]></dc:creator><pubDate>Mon, 28 May 2012 11:38:54 GMT</pubDate></item></channel></rss>