<?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[Methode zu Funktion casten?!?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab grad ein wenig mit SDL angefangen und wollte nun einen SDL_thread laufen lassen. Die SDL Webseite sagt dazu folgendes:</p>
<pre><code class="language-cpp">SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data);
</code></pre>
<p>Da ich das ganze in Klassen kapseln möchte habe ich aber nur Methoden fürs Callback zur verfügung:</p>
<pre><code class="language-cpp">short SDLApplication::run() {
   	m_RunThread = SDL_CreateThread(eventLoop, NULL);
    	if ( m_RunThread == NULL ) {
       		m_ErrorMsg = SDL_GetError();
		return -1;
	}
// [...]
}
</code></pre>
<pre><code class="language-cpp">int SDLApplication::eventLoop() {/* [...] */}
</code></pre>
<p>Dieser Versuch wird mit Folgender compilermeldung quitiert:</p>
<blockquote>
<p>error: argument of type `int (SDLApplication::)()' does not match `int (<em>)(void</em>)'</p>
</blockquote>
<p>Wie bekomme ich nun meine Methode da mit rein? (werd daraus nicht schlau).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134451/methode-zu-funktion-casten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 16:26:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134451.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Jan 2006 09:50:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode zu Funktion casten?!? on Thu, 26 Jan 2006 09:50:50 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab grad ein wenig mit SDL angefangen und wollte nun einen SDL_thread laufen lassen. Die SDL Webseite sagt dazu folgendes:</p>
<pre><code class="language-cpp">SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data);
</code></pre>
<p>Da ich das ganze in Klassen kapseln möchte habe ich aber nur Methoden fürs Callback zur verfügung:</p>
<pre><code class="language-cpp">short SDLApplication::run() {
   	m_RunThread = SDL_CreateThread(eventLoop, NULL);
    	if ( m_RunThread == NULL ) {
       		m_ErrorMsg = SDL_GetError();
		return -1;
	}
// [...]
}
</code></pre>
<pre><code class="language-cpp">int SDLApplication::eventLoop() {/* [...] */}
</code></pre>
<p>Dieser Versuch wird mit Folgender compilermeldung quitiert:</p>
<blockquote>
<p>error: argument of type `int (SDLApplication::)()' does not match `int (<em>)(void</em>)'</p>
</blockquote>
<p>Wie bekomme ich nun meine Methode da mit rein? (werd daraus nicht schlau).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976643</guid><dc:creator><![CDATA[THE_FreaK]]></dc:creator><pubDate>Thu, 26 Jan 2006 09:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Methode zu Funktion casten?!? on Thu, 26 Jan 2006 10:08:44 GMT]]></title><description><![CDATA[<p>Methoden haben einen (versteckten) zusätzlichen Parameter 'class* this', der mit übergeben werden muß (wie das passiert, hängt vom verwendeten Compiler ab), deshalb kannst du sie nicht so einfach in &quot;normale&quot; Funktionen umwandeln.</p>
<p>Du könntest höchstens eine statische Methode definieren und übergeben(die hat keinen this-Pointer) und innerhalb dieser Methode das Objekt festlegen, das letztendlich loopen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976662</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 26 Jan 2006 10:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Methode zu Funktion casten?!? on Thu, 26 Jan 2006 10:12:00 GMT]]></title><description><![CDATA[<p>Ergänzung: Für dich hiese das:</p>
<pre><code class="language-cpp">class SDLApplication
{
public:
  static int s_eventloop(void* app)
  {
    SDLApplication* self=(SDLApplication*)app;
    self-&gt;eventloop();
  }
}

short SDLApplication::run()
{
  m_RunThread = SDL_CreateThread(s_eventLoop, this);
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/976669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976669</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 26 Jan 2006 10:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Methode zu Funktion casten?!? on Thu, 26 Jan 2006 11:24:21 GMT]]></title><description><![CDATA[<p>Dieses Problem hatte ich auch schon, nur im Zusammenhang mit Fenstern und der Windows-Nachrichtenschleife.<br />
Habe das am Ende so gelöst, dass die Klasse nen statisches Element (ne std::map) bekam, in welchem sich alle Objekte im Konstruktor eingetragen und im Desktruktor ausgetragen haben. Über das Handle habe ich in der Nachrichtenschleife, dann immer gewusst für welches Objekt die Nachricht bestimmt ist und an dieses die Nachricht weitergeleitet.</p>
<p>Ist halt leider das Übel, das man mit OO und prozeduralen APIs hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976783</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 26 Jan 2006 11:24:21 GMT</pubDate></item></channel></rss>