<?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[Pointer zu Memberfunktion]]></title><description><![CDATA[<p>Ich möchte eine Callback-Funtion mit folgendem Konstruktor implementieren:</p>
<pre><code>Callback::Callback(Base* sender, void* method)
</code></pre>
<p>Wobei sender der Zeiger auf die Instanz des Objekts ist und method der Zeiger auf die Funktion. Geht das? Funktionszeiger gehen leider schon von der Syntax her nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326367/pointer-zu-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 03:05:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326367.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jun 2014 14:51:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 14:51:49 GMT]]></title><description><![CDATA[<p>Ich möchte eine Callback-Funtion mit folgendem Konstruktor implementieren:</p>
<pre><code>Callback::Callback(Base* sender, void* method)
</code></pre>
<p>Wobei sender der Zeiger auf die Instanz des Objekts ist und method der Zeiger auf die Funktion. Geht das? Funktionszeiger gehen leider schon von der Syntax her nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403880</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Sat, 14 Jun 2014 14:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 14:55:20 GMT]]></title><description><![CDATA[<p>Willst du eine Factory einrichten? Erläuter dein Problem vielleicht etwas genauer.</p>
<p>Falls ja, nimm <code>std::function</code> mit entsprechendem Rückgabetyp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403882</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Jun 2014 14:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 15:17:27 GMT]]></title><description><![CDATA[<p>Nein, ich möchte eine Memberfunktion eines Objektes aufrufen können. Mal davon abgesehen, dass ich die Standard-Library grundsätzlich ablehne, würde auch std::function hier nicht helfen. Das ganze muss ohne Angabe von irgendwelchen Templateargumenten gehen. Lediglich zwei Pointer zum Vorhalten der nötigen Informationen wenn möglich. Also in etwa sowas:</p>
<pre><code>class Base
{
public:
	Base() {};

	/*static*/ void Print()
	{
		std::wcout &lt;&lt; L&quot;Hello World!&quot; &lt;&lt; std::endl;
	}
};

int main()
{

	Base* base = new Base();
	void* ptr = Base::Print;
	reinterpret_cast&lt;void(*)()&gt;(ptr)();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2403883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403883</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Sat, 14 Jun 2014 15:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 15:25:56 GMT]]></title><description><![CDATA[<p>Enumerator schrieb:</p>
<blockquote>
<p>Mal davon abgesehen, dass ich die Standard-Library grundsätzlich ablehne, würde auch std::function hier nicht helfen.</p>
</blockquote>
<p>Ich glaube doch. Du kannst die Argumente, die gleich bleiben, binden, während der Rest als Funktionsparameter angegeben wird. Sag vielleicht mal klar, welche Informationen du bei der Konstruktion des Funktionsobjekts hast, und welche Argumente erst zum Zeitpunkt des Aufrufs. Aus deinem Beispiel kann ich jedenfalls nicht entnehmen, was du vorhast, zumal <code>base</code> gar nirgends benutzt wird.</p>
<p>Wenn ich dich richtig verstanden habe: Ohne Templates wird das jedenfalls nicht generisch funktionieren. Und ohne Standardbibliothek kannst du das Rad neu erfinden... Nur aus religiösen Motiven würde ich das nicht tun <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/2403884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403884</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Jun 2014 15:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 15:29:08 GMT]]></title><description><![CDATA[<blockquote>
<p>Mal davon abgesehen, dass ich die Standard-Library grundsätzlich ablehne</p>
</blockquote>
<p>Mit der Einstellung wirst du nicht weit kommen.</p>
<blockquote>
<p>Das ganze muss ohne Angabe von irgendwelchen Templateargumenten gehen</p>
</blockquote>
<p>Warum?</p>
<blockquote>
<pre><code>reinterpret_cast&lt;void(*)()&gt;(ptr)();
</code></pre>
</blockquote>
<p>Das erzeugt undefiniertes Verhalten.<br />
Edit:</p>
<blockquote>
<p>Du kannst die Argumente, die gleich bleiben, binden, während der Rest als Funktionsparameter angegeben wird. Sag vielleicht mal klar, welche Informationen du bei der Konstruktion des Funktionsobjekts hast, und welche Argumente erst zum Zeitpunkt des Aufrufs.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403885</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 14 Jun 2014 15:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 15:46:57 GMT]]></title><description><![CDATA[<p>Enumerator schrieb:</p>
<blockquote>
<p>Nein, ich möchte eine Memberfunktion eines Objektes aufrufen können. Mal davon abgesehen, dass ich die Standard-Library grundsätzlich ablehne, würde auch std::function hier nicht helfen. Das ganze muss ohne Angabe von irgendwelchen Templateargumenten gehen. Lediglich zwei Pointer zum Vorhalten der nötigen Informationen wenn möglich.</p>
</blockquote>
<p>Pro Satz 2 mal Facepalm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403887</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 14 Jun 2014 15:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 18:41:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

struct foo
{
    void bar() { std::cout &lt;&lt; &quot;foo::bar\n&quot;; }
};

int main()
{
    foo x;
    void (foo::*ptr)() = &amp;foo::bar;
    (x.*ptr)(); 
}
</code></pre>
<p>Ausgabe ohne Standardbibliothek ist mir zu umständlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403916</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 14 Jun 2014 18:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer zu Memberfunktion on Sat, 14 Jun 2014 18:48:53 GMT]]></title><description><![CDATA[<p>Enumerator schrieb:</p>
<blockquote>
<p>Nein, ich möchte eine Memberfunktion eines Objektes aufrufen können. Mal davon abgesehen, dass ich die Standard-Library grundsätzlich ablehne, würde auch std::function hier nicht helfen. Das ganze muss ohne Angabe von irgendwelchen Templateargumenten gehen. Lediglich zwei Pointer zum Vorhalten der nötigen Informationen wenn möglich. Also in etwa sowas:</p>
<pre><code>class Base
{
public:
	Base() {};

	/*static*/ void Print()
	{
		std::wcout &lt;&lt; L&quot;Hello World!&quot; &lt;&lt; std::endl;
	}
};

int main()
{

	Base* base = new Base();
	void* ptr = Base::Print;
	reinterpret_cast&lt;void(*)()&gt;(ptr)();
}
</code></pre>
</blockquote>
<p>Lehn lieber mal new ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403919</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 14 Jun 2014 18:48:53 GMT</pubDate></item></channel></rss>