<?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[Memberfunctionpointer C++]]></title><description><![CDATA[<p>Tach zusammen<br />
Folgender C++ Code möchte ich zum laufen bringen :</p>
<pre><code class="language-cpp">ETHWrapper.h (ANSI-C)
-----------------
typedef void (t_handleDSAP) (t_Large_ethFrame);

INT8 regDSAPListener(t_handleDSAP handl);

ErrorHandler.h,cpp
------------------

class ErrorHandler{

ErrorHandler(ETHWrapper* eth);
void handleDSAP(t_Large_ethFrame ethFrame);
};

void ErrorHandler::handleDSAP(t_Large_ethFrame frame){
	//call other c++ ErrorHandler- Memberfunction
}

ErrorHandler::ErrorHandler(ETHWrapper* eth){
	//Hier tritt das Problem auf 
	t_handleDSAP* handle=&amp;handleDSAP;
	eth-&gt;regDSAPListener(handle);
}
</code></pre>
<p>Ich habe es schon damit versucht die zu registrierende Function<br />
static zu machen &quot;static void handleDSAP(t_Large_ethFrame ethFrame);&quot; . Danach habe ich aber das Problem, dass ich aus dieser Methode keine Methode eines ErrorHandlers-Objekts aufrufen kann.<br />
Habe im Netz auch Lösungen mit Templates gefunden, welche ich leider nicht einsetzten kann, da die zu registrierende Funktion später aus einer C-Funktion aufgerufen werden soll. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Deshalb muss es irgendeine andere Lösung geben.<br />
Ich hoffe ihr könnt mir weiterhelfen</p>
<p>gruss,<br />
roger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124544/memberfunctionpointer-c</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 03:28:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124544.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Oct 2005 13:29:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memberfunctionpointer C++ on Fri, 28 Oct 2005 13:29:10 GMT]]></title><description><![CDATA[<p>Tach zusammen<br />
Folgender C++ Code möchte ich zum laufen bringen :</p>
<pre><code class="language-cpp">ETHWrapper.h (ANSI-C)
-----------------
typedef void (t_handleDSAP) (t_Large_ethFrame);

INT8 regDSAPListener(t_handleDSAP handl);

ErrorHandler.h,cpp
------------------

class ErrorHandler{

ErrorHandler(ETHWrapper* eth);
void handleDSAP(t_Large_ethFrame ethFrame);
};

void ErrorHandler::handleDSAP(t_Large_ethFrame frame){
	//call other c++ ErrorHandler- Memberfunction
}

ErrorHandler::ErrorHandler(ETHWrapper* eth){
	//Hier tritt das Problem auf 
	t_handleDSAP* handle=&amp;handleDSAP;
	eth-&gt;regDSAPListener(handle);
}
</code></pre>
<p>Ich habe es schon damit versucht die zu registrierende Function<br />
static zu machen &quot;static void handleDSAP(t_Large_ethFrame ethFrame);&quot; . Danach habe ich aber das Problem, dass ich aus dieser Methode keine Methode eines ErrorHandlers-Objekts aufrufen kann.<br />
Habe im Netz auch Lösungen mit Templates gefunden, welche ich leider nicht einsetzten kann, da die zu registrierende Funktion später aus einer C-Funktion aufgerufen werden soll. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Deshalb muss es irgendeine andere Lösung geben.<br />
Ich hoffe ihr könnt mir weiterhelfen</p>
<p>gruss,<br />
roger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902806</guid><dc:creator><![CDATA[Borowski]]></dc:creator><pubDate>Fri, 28 Oct 2005 13:29:10 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunctionpointer C++ on Fri, 28 Oct 2005 13:44:34 GMT]]></title><description><![CDATA[<p>Member-Funktionen haben noch einen impliziten this-Parameter, deshalb können sie so schlecht an C übergeben werden. Da benötigst du eine Wrapper-Funktion drumherum (global oder statisch), die selber das richtige Objekt kennt, z.B.:</p>
<pre><code class="language-cpp">static void ErrorHandler::handleDSAP(t_Large_ethFrame ethFrame)
{
  static ErrorHandler eh;
  eh.doSomething();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/902815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902815</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 28 Oct 2005 13:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunctionpointer C++ on Fri, 28 Oct 2005 14:03:00 GMT]]></title><description><![CDATA[<p>Hallo CStoll<br />
Vielen dank für die rasche Antwort !</p>
<p>Eigentlich möchte ich das ganze ohne static lösen, da ich mir so sonst einen Singelton einbaue. Gibt es keine Möglichkeit bsw. mit einer Art dynamic_cast für Funktionen ?</p>
<p>[cpp]<br />
ErrorHandler.h,cpp<br />
------------------</p>
<p>class ErrorHandler{</p>
<p>ErrorHandler(ETHWrapper* eth);<br />
void handleDSAP(t_Large_ethFrame ethFrame);<br />
<strong>void writeError(string s);</strong><br />
};</p>
<p>void ErrorHandler::writeError(string s){<br />
...<br />
}<br />
void ErrorHandler::handleDSAP(t_Large_ethFrame frame){<br />
<strong>writeError(frame.error);</strong>}</p>
<p>ErrorHandler::ErrorHandler(ETHWrapper* eth){<br />
//Hier tritt das Problem auf<br />
t_handleDSAP* handle=&amp;handleDSAP;<br />
eth-&gt;regDSAPListener(handle);<br />
}<br />
[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902823</guid><dc:creator><![CDATA[Borowski]]></dc:creator><pubDate>Fri, 28 Oct 2005 14:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunctionpointer C++ on Fri, 28 Oct 2005 14:38:13 GMT]]></title><description><![CDATA[<p>Da es sich um einen C-Aufruf handelt, hast Du mit &quot;puren&quot; Methodenzeigern keine Chance.</p>
<p>Du musst aus dem Argument, mit dem der Errorhandler aufgerufen wird, irgendwie wieder<br />
auf das Objekt schließen können. (Ich gehe jetzt mal davon aus, dass es sinnvoll ist,<br />
mehrere verschiedene ErrorHandler-Objekte zu haben - anderenfalls: Singleton)</p>
<p>Dazu kannst Du dir einen Dispatcher schreiben, der aus dem Argument, dass die Fehler-<br />
behandlungsroutine liefert, das passende Errorhandler-Objekt ermittelt. Voraussetzung dafür:<br />
Das Argument enthält überhaupt Informationen, um dies zu tun. Anderenfalls bist Du<br />
aufgeschmissen.</p>
<p>Was für einen Rückgabewert liefert denn die Registrierungsroutine für den Fehlerhandler?<br />
Als Rückgabewert ist ja ein INT8 angegeben.</p>
<p>Vielleicht ist der Rückgabewert eine Art Handle. Dann könntest Du im Fehlerhandler<br />
sowas in der Art machen (Pseudocode):</p>
<p>void errHandler( ... frame)<br />
{<br />
res = handle_container.find( frame.handle); // Handle vom Registrierungsaufruf suchen<br />
/// wenn handle_container z.B. eine Map ist, könnte er paare von Handles und Pointern<br />
/// auf Errhandler-Objekte speichern. handle_container muss dann aber static (pfui)<br />
/// sein oder in einem Singleton liegen<br />
res.call( frame);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902839</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 28 Oct 2005 14:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunctionpointer C++ on Wed, 02 Nov 2005 12:57:10 GMT]]></title><description><![CDATA[<p>Hallo 7H3 N4C3R<br />
Danke fuer die Antwort !</p>
<p>Schade, ich hatte eigendlich gehofft es gäbe so eine &quot;Brute Force&quot; Methode, die einen Functionpointer erzeugen könnte. Ich werde es nun halt mit einer Zwischenklasse, die wie du es vorgeschlagen hast, die die Objekte verwaltet und entspr. aufruft, wenn eine Mitteilung für sie eintrifft.</p>
<p>Danke nochmals</p>
<p>Gruss,<br />
Borowski</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906399</guid><dc:creator><![CDATA[Borowski]]></dc:creator><pubDate>Wed, 02 Nov 2005 12:57:10 GMT</pubDate></item></channel></rss>