<?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[interface zu void casten]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin gerade dabei box2d in mein spiel zu integrieren. Um auf collisionen richtig reagieren zu können bietet box ein interface an, welches ein userdatapointer über void anbietet. Ich bin jetzt nicht sicher in wie weit ich legale sachen mache. Zuerst hab ich das probiert:</p>
<pre><code class="language-cpp">class Actor : public Interface1, public Interface2
{
	...
	b2Body *body = world.CreateBody(def);
	body.userData = this; // userData ist ein void*
}

class MyContactListener : public b2ContactListener
{
	virtual void BeginContact(b2Contact* contact)
	{
		...
		Interface2 *entity = static_cast&lt;Interface2*&gt;(userDataB);
	}
}
</code></pre>
<p>jetzt war allerdings die vtable falsch, ich hab nur die funktionen vom interface1 gesehen, nach ein bischen nachforschen hab ich rausgefunden das man von void* nur auf die konkrete klasse casten kann die man reingesteckt hat(stimmt das?), also hab ich</p>
<pre><code class="language-cpp">body.userData = static_cast&lt;Interface2&gt;(this);
</code></pre>
<p>gemacht, funktioniert auch aber ich frag mich ob das ok ist oder ob ich da im UB land bin? Und wenn das nicht ok ist, wie dann? <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320590/interface-zu-void-casten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 18:38:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320590.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Oct 2013 10:11:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:11:42 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin gerade dabei box2d in mein spiel zu integrieren. Um auf collisionen richtig reagieren zu können bietet box ein interface an, welches ein userdatapointer über void anbietet. Ich bin jetzt nicht sicher in wie weit ich legale sachen mache. Zuerst hab ich das probiert:</p>
<pre><code class="language-cpp">class Actor : public Interface1, public Interface2
{
	...
	b2Body *body = world.CreateBody(def);
	body.userData = this; // userData ist ein void*
}

class MyContactListener : public b2ContactListener
{
	virtual void BeginContact(b2Contact* contact)
	{
		...
		Interface2 *entity = static_cast&lt;Interface2*&gt;(userDataB);
	}
}
</code></pre>
<p>jetzt war allerdings die vtable falsch, ich hab nur die funktionen vom interface1 gesehen, nach ein bischen nachforschen hab ich rausgefunden das man von void* nur auf die konkrete klasse casten kann die man reingesteckt hat(stimmt das?), also hab ich</p>
<pre><code class="language-cpp">body.userData = static_cast&lt;Interface2&gt;(this);
</code></pre>
<p>gemacht, funktioniert auch aber ich frag mich ob das ok ist oder ob ich da im UB land bin? Und wenn das nicht ok ist, wie dann? <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357754</guid><dc:creator><![CDATA[interfacierer]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 11:02:02 GMT]]></title><description><![CDATA[<p>Erst mal muss es body**-&gt;<em><em>userData = <em><em>(void</em>)</em></em> this; heißen.<br />
In C++ kann nur implizit <em>von</em> void</em> gecastet werden (Kompabilität zu malloc), aber nicht <em>nach</em> void*. edit: Ne, andersrum. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>interfacierer schrieb:</p>
<blockquote>
<p>das man von void* nur auf die konkrete klasse casten kann die man reingesteckt hat(stimmt das?)</p>
</blockquote>
<p>Ja. (edit)</p>
<p>interfacierer schrieb:</p>
<blockquote>
<p>also hab ich</p>
<pre><code class="language-cpp">body.userData = static_cast&lt;Interface2&gt;(this);
</code></pre>
<p>gemacht, funktioniert auch aber ich frag mich ob das ok ist oder ob ich da im UB land bin? Und wenn das nicht ok ist, wie dann? <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>
</blockquote>
<p>Ich bezweifle, dass das funktioniert. Erst mal, wie gesagt, muss es -&gt; statt . heißen, außerdem muss der Typ Interface2***** sein, also insgesamt:</p>
<pre><code>body-&gt;userData = static_cast&lt;Interface2*&gt;(this);
</code></pre>
<p>oder bei void* ausnahmsweise mit der Schreibweise oben (wobei ich static_cast sonst für aussagekräftiger und besser ersichtlich halte)<br />
Das ist jetzt &quot;perfectly defined&quot;.. <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>
<p>edit: Viele kleine Leichtsinnsfehler machen wenn das Internet gerade langsam ist, kann nervig sein.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Was ich noch sagen wollte: In vielen (aber nicht allen) Fällen zeugt es von schlechtem Design/Stil, wenn man void* benutzt, da man damit ein wenig Typprüfung verschenkt (eben weil die cast-Bedingungen da so lax sind). Wenn die Art der Daten bekannt sind, sollte man als Zeigertyp einen auf deren (gemeinsame Ober-) Klasse verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357758</guid><dc:creator><![CDATA[philipp2100]]></dc:creator><pubDate>Fri, 04 Oct 2013 11:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:38:47 GMT]]></title><description><![CDATA[<p>interfacierer schrieb:</p>
<blockquote>
<p>n hab ich rausgefunden das man von void* nur auf die konkrete klasse casten kann die man reingesteckt hat(stimmt das?)</p>
</blockquote>
<p>richtig.</p>
<p>interfacierer schrieb:</p>
<blockquote>
<p>also hab ich</p>
<pre><code class="language-cpp">body.userData = static_cast&lt;Interface2&gt;(this);
</code></pre>
<p>gemacht, funktioniert auch aber ich frag mich ob das ok ist oder ob ich da im UB land bin? Und wenn das nicht ok ist, wie dann? <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>
</blockquote>
<p>Das ist ok so (Syntaxfehler ignoriert). Es könnte allerdings sinnvoll sein, den Zugriff auf userData geeignet zu kapseln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357760</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:44:24 GMT]]></title><description><![CDATA[<p>philipp2100 schrieb:</p>
<blockquote>
<p>interfacierer schrieb:</p>
<blockquote>
<p>das man von void* nur auf die konkrete klasse casten kann die man reingesteckt hat(stimmt das?)</p>
</blockquote>
<p>Nein, auch auf Oberklassen.</p>
</blockquote>
<p>Casten kann man nat. fast beliebig. Nur entspricht eine Sequenz der Form<br />
T* -&gt;(implizit)-&gt; void* -&gt; (static_cast) -&gt; U*<br />
Semantisch und in Hinblick auf Definiertheit einem direkten<br />
T* -&gt; (reinterpret_cast) -&gt; U*<br />
und ist für Casts innerhalb einer Vererbungshierarchie i.d.R.*) undefiniert.</p>
<p><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="😉"
    /> Ausnahmsweise ist es mal bei Klassen mit Standardlayout erlaubt - aber selten sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357762</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:44:24 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:43:40 GMT]]></title><description><![CDATA[<p>Super, 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/2357763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357763</guid><dc:creator><![CDATA[interfacierer]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:43:40 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:49:34 GMT]]></title><description><![CDATA[<p>philipp2100 schrieb:</p>
<blockquote>
<p>Was ich noch sagen wollte: In vielen (aber nicht allen) Fällen zeugt es von schlechtem Design/Stil, wenn man void* benutzt, da man damit ein wenig Typprüfung verschenkt (eben weil die cast-Bedingungen da so lax sind). Wenn die Art der Daten bekannt sind, sollte man als Zeigertyp einen auf deren (gemeinsame Ober-) Klasse verwenden.</p>
</blockquote>
<p>Das kann ich ja leider nicht ändern, das interface ist ja von box2d vorgegeben.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Das ist ok so (Syntaxfehler ignoriert). Es könnte allerdings sinnvoll sein, den Zugriff auf userData geeignet zu kapseln.</p>
</blockquote>
<p>Hmm was schwebt dir denn da vor? Ich wüßt gerade nicht wie ich das sinnvoll machen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357765</guid><dc:creator><![CDATA[interfacierer]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 10:58:51 GMT]]></title><description><![CDATA[<p>philipp2100 schrieb:</p>
<blockquote>
<p>In C++ kann nur implizit <em>von</em> void* gecastet werden (Kompabilität zu malloc), aber nicht <em>nach</em> void*.</p>
</blockquote>
<p>Ne, ist genau umgekehrt. Es kann implizit nach void* konvertiert werden, aber nicht von void*. Und dass es eben keine Kompabilität zu malloc gibt ist eines der Paradebeispiele dafür, warum nicht jeder C Code von einem C++ Compiler geschluckt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357768</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 04 Oct 2013 10:58:51 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 11:01:33 GMT]]></title><description><![CDATA[<p>Stimmt.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357770</guid><dc:creator><![CDATA[philipp2100]]></dc:creator><pubDate>Fri, 04 Oct 2013 11:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 11:44:01 GMT]]></title><description><![CDATA[<p>Stimmt. Also void* sollte man wenn irgendwie möglich vermeiden. Mir ist auch derzeit, abgesehen von vordefinierten Interfaces kein sinnvoller Anwendungsfall untergekommen, wo es keine andere Lösung als void* gab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357781</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 04 Oct 2013 11:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 11:52:06 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Stimmt. Also void* sollte man wenn irgendwie möglich vermeiden. Mir ist auch derzeit, abgesehen von vordefinierten Interfaces kein sinnvoller Anwendungsfall untergekommen, wo es keine andere Lösung als void* gab...</p>
</blockquote>
<p>Ein erster Ansatz wäre wohl, einfach den Typ zu nehmen, den die Daten tatsächlich haben. Also den userdatapointer vom Typ userdata* zu machen, statt void*. Da es so aussieht, als solle hier Polymorphie gemacht werden, nehme man einen Zeiger vom entsprechenden Basisklassentyp (Interface2?<sup>*</sup>).<br />
Anderer Ansatz, falls void* hier benutzt wird, um ein Funktion universell für mehrere Datentypen anzubieten, wären natürlich Templates.</p>
<p>Das sind die beiden Standardansätze zur Vermeidung von void* (der zweite eher als der erste, denn beim ersten wäre der void* auch in C komisch benutzt und das Problem läge tiefer).</p>
<p><sup>*</sup>: Leider ist das Codebeispiel bei all der Vererbung und Pointerei etwas schwer zu durchschauen. Zudem stark verkürzt. Ich bin mir nicht sicher, was hier wie zusammen hängt und was überhaupt erreicht werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357783</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 04 Oct 2013 11:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 12:20:47 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Stimmt. Also void* sollte man wenn irgendwie möglich vermeiden. Mir ist auch derzeit, abgesehen von vordefinierten Interfaces kein sinnvoller Anwendungsfall untergekommen, wo es keine andere Lösung als void* gab...</p>
</blockquote>
<p>void* ist die höchste Stufe von Type-Erasure und immer anzustreben um gegen Template-Bloat vorzugehen und die Compilezeiten herunterzuschrauben.</p>
<p>Was nichts daran ändert, dass ein void* im Interface nichts zu suchen hat.</p>
<p>Im gegebenen Fall bin ich auch gegen das Listener-Pattern, das kann alles in ohne explizite Vererbunghierarchie gelöst werden<br />
C++03/11-Lösung: <a href="http://www.boost.org/doc/libs/release/doc/html/signals/tutorial.html" rel="nofollow">http://www.boost.org/doc/libs/release/doc/html/signals/tutorial.html</a><br />
C++11-Lösung: std::vector&lt;std::function&lt;&gt;&gt;<br />
Warum kein Observer: <a href="http://stackoverflow.com/questions/11619680/why-should-the-observer-pattern-be-deprecated" rel="nofollow">http://stackoverflow.com/questions/11619680/why-should-the-observer-pattern-be-deprecated</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357797</guid><dc:creator><![CDATA[bless&amp;lt;void*&amp;gt;]]></dc:creator><pubDate>Fri, 04 Oct 2013 12:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 12:47:55 GMT]]></title><description><![CDATA[<p>Ich kann ja mal grob zusammenfassen wie das bei box2d abläuft. Grob gibt es die welt (b2World) in welcher man bodies (b2Body) erstellen kann welche aus mehreren fixtures (b2Fixture) bestehen. Jede fixture hat eine shape (b2CircleShape, b2ChaiSshape, b2PolygonShape...), diese definiert die form der fixture. Wenn man die welt also mit bodies gefüllt hat kann man das ganze simulieren, wenn jetzt zwei fixtures eine kollision haben wird der definierte contact listener von box2d aufgerufen (in diesem fall MyContactListener aud dem ersten post) und man bekommt die information welche fixtures kollidieren (die fixtures kennen ihren body, daher kann man sich den holen). Mein Actor ist jetzt ein body in dieser welt. Das Interface das box2d anbietet hatte ich ja gepostet, das ist 1zu1 die funktion</p>
<pre><code class="language-cpp">virtual void BeginContact(b2Contact* contact)
</code></pre>
<p>im b2Contact stehen dann die zwei kollidierenden fixtures. Die einzige möglichkeit von der kollision auf mein eigenes objekt zu schließen ist der userData pointer. D.h. ich setz im actor bei der erstellung des bodies den userData pointer auf &quot;this&quot; (das war halt mein eigentliches problem, wo ich nicht wussete ob ich da UB habe wenn ich das rumcaste). Ich seh jetzt nicht wie ich das eleganter lösen könnte, bin aber gerne offen für vorschläge <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>
<p>Nochmal mit ein bischen mehr code zur verdeutlichung</p>
<pre><code class="language-cpp">class MyContactListener : public b2ContactListener
{
	void BeginContact(b2Contact* contact)
	{
		// try to notify A
		void *userDataA = contact-&gt;GetFixtureA()-&gt;GetBody()-&gt;GetUserData();
		if(userDataA)
		{
			PhysicBodyEntity *entity = static_cast&lt;PhysicBodyEntity*&gt;(userDataA);
			entity-&gt;BeginContact(contact);
		}

		// then try notify B
		void *userDataB = contact-&gt;GetFixtureB()-&gt;GetBody()-&gt;GetUserData();
		if(userDataB)
		{
			PhysicBodyEntity *entity = static_cast&lt;PhysicBodyEntity*&gt;(userDataB);
			entity-&gt;BeginContact(contact);
		}

	}

	void EndContact(b2Contact* contact)
	{
		...
	}
}

class Actor : public DrawableNode, public Drawable, public PhysicBodyEntity
{
	Actor(b2World &amp;world)
	{
		b2BodyDef bodyDef;
		...
		bodyDef.userData = static_cast&lt;PhysicBodyEntity*&gt;(this);
		world.CreateBody(bodyDef);

		...
	}
}

int main()
{
	MyContactListener contactlistener;
	b2World world(b2Vec2(0, -10));
	world.SetContactListener(&amp;contactlistener);

	Actor actor(world);

	// hier gibt mir box dann über den listener die collisionen zurück
	world.Step(...);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2357809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357809</guid><dc:creator><![CDATA[interfacierer]]></dc:creator><pubDate>Fri, 04 Oct 2013 12:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 12:53:46 GMT]]></title><description><![CDATA[<p>Ja. Naja die haben die Userdaten unschön über void* gemacht. Vielleicht wärs mit einem Template auch gegangen oder vielleicht ging es wirklich nicht anders. Ich zumindest kann das, ohne genau Kenntniss der Hintergründ und der lib nicht beurteilen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357812</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 04 Oct 2013 12:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 12:56:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Ausnahmsweise ist es mal bei Klassen mit Standardlayout erlaubt - aber selten sinnvoll.</p>
</blockquote>
<p>Es ist zudem auch erlaubt, den Zeiger zu ihrem (der Deklarationsreihenfolge nach) ersten Member zu casten.<br />
(Um die Liste vollstaendiger zu machen)</p>
<blockquote>
<p>D.h. ich setz im actor bei der erstellung des bodies den userData pointer auf &quot;this&quot; (das war halt mein eigentliches problem, wo ich nicht wussete ob ich da UB habe wenn ich das rumcaste).</p>
</blockquote>
<p>Ich kann grad' den Thread nicht komplett durchlesen... daher bitte ignorieren falls unpassend: Du brauchst die Adresse der Body-Basisklasse (bzw. des Basisklassen-Subobjekts)? Die kannst du doch direkt bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357813</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 04 Oct 2013 12:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 14:00:43 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<blockquote>
<p>Ausnahmsweise ist es mal bei Klassen mit Standardlayout erlaubt - aber selten sinnvoll.</p>
</blockquote>
<p>Es ist zudem auch erlaubt, den Zeiger zu ihrem (der Deklarationsreihenfolge nach) ersten Member zu casten.<br />
(Um die Liste vollstaendiger zu machen)</p>
</blockquote>
<p>Allerdings ist das kein Cast innerhalb der Vererbungshierarchie, auf die ich mich (nur) bezogen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357838</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Oct 2013 14:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to interface zu void casten on Fri, 04 Oct 2013 14:12:10 GMT]]></title><description><![CDATA[<p>Ich habe sozuagen darauf geantwortet:</p>
<blockquote>
<p>Nein, auch auf Oberklassen.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2357849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357849</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 04 Oct 2013 14:12:10 GMT</pubDate></item></channel></rss>