<?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[Vererbung und static_cast Problematik]]></title><description><![CDATA[<pre><code class="language-cpp">class Base{

int base;

};

class A : public Base{

int a;

};

class B: public Base{

int b;

};

std::list&lt;Base*&gt; data;
</code></pre>
<p>die Liste enthält IMMER in abwechselnder Reihenfolge A und B objekte.</p>
<p>Die einzigste Möglichkeit auf die Daten von A und B zuzugriefen ist ein downcast, was nicht schlimm ist , da die reihenfolge der objekt immst die gleiceh ist, und ich so immer sicher casten kann.</p>
<p>Aber ich bin immer noch skeptisch, da so downcast von einem schlechten Design sprechen, oder geht es in dem fall nich anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190881/vererbung-und-static_cast-problematik</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 19:45:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190881.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Aug 2007 06:15:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:15:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Base{

int base;

};

class A : public Base{

int a;

};

class B: public Base{

int b;

};

std::list&lt;Base*&gt; data;
</code></pre>
<p>die Liste enthält IMMER in abwechselnder Reihenfolge A und B objekte.</p>
<p>Die einzigste Möglichkeit auf die Daten von A und B zuzugriefen ist ein downcast, was nicht schlimm ist , da die reihenfolge der objekt immst die gleiceh ist, und ich so immer sicher casten kann.</p>
<p>Aber ich bin immer noch skeptisch, da so downcast von einem schlechten Design sprechen, oder geht es in dem fall nich anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353456</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:29:08 GMT]]></title><description><![CDATA[<p>also erstmal nimm keine static_cast zum down_casten sondern nimm eine dynamic_cast um das richtig objek zu finden:</p>
<pre><code class="language-cpp">if (A* obj=dynamic_cast&lt;A*&gt;(item))
{
  //code für a
}
if (B* obj=dynamic_cast&lt;B*&gt;(item))
{
  //code für a
}
</code></pre>
<p>das ist die saubere und sichere methode. sie hat allerdings zwei nachteile: a) sie braucht rtti, was aber eigentlich kein echtes problem mehr sein sollte b) es kann streß geben, wenn man versucht das über dll-,so-grenzen hinweg zu nutzen.</p>
<p>schlechts design ist es nicht, wenn sich das problem nicht anders sinnvoll lösen lässt, was bei down-casts häufiger mal vorkommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353460</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:32:09 GMT]]></title><description><![CDATA[<p>naja dynamic_cast ist sicher wenn ich jedesmal überprüfe ob es wirklich Typ A oder B ist, da aber die Liste immer objekte in abwechsender reihenfolge enhält würd ich eben static_cast nutzen.. aber nur wegen der performance!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353462</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:36:05 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>...da aber die Liste immer objekte in abwechsender reihenfolge enhält würd ich eben static_cast nutzen.. aber nur wegen der performance!</p>
</blockquote>
<p>du &quot;optimierst&quot; an der falschen stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353464</guid><dc:creator><![CDATA[publicServiceAnnouncement]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:40:52 GMT]]></title><description><![CDATA[<p>Wenn man zwei unterschiedliche Objekttypen in einen Container steckt und beim<br />
spätern Zugriff in JEDEM FalL wieder casten muss, dann ist dies, meines<br />
Erachtens, (oft) schlechtes Design. Denn offentsichtlich haben die &quot;Items&quot; in<br />
dem Container keine Gemeinsamkeit und stecken offenbar nur aus Bequemlichkeit<br />
in einem gemeinsamen Container.<br />
Aufgrund deiner lückenhaften Beschreibung kann ich natürlich nicht sagen ob<br />
dein konkretes Problem eine Ausnahme darstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353465</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:44:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24375">@redhead</a>: schau dir mal mein ersten post an.. hätten sie keien gemeinsamkeit würd ich das natürlich nich tun.. die haben gleiceh basisattribute, aber unterscheiden sich eben in extra parametern!</p>
<p>@publicServiceAnnouncement: Erklär mal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353467</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:52:48 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>naja dynamic_cast ist sicher wenn ich jedesmal überprüfe ob es wirklich Typ A oder B ist,</p>
</blockquote>
<p>das macht dynamic_cast mit dem idiom, das ich vorhin gepostet habe, von selber.</p>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>da aber die Liste immer objekte in abwechsender reihenfolge enhält würd ich eben static_cast nutzen.. aber nur wegen der performance!</p>
</blockquote>
<p>selbst wenn du weißt, was da drin ist, solltest du ein dynamic_cast benutzen. so schrecklich langsam (es sind ein paar if-abfragen...) ist es nicht und wird dich vor bösen überraschungen bewahren, wenn doch mal was mit den daten nicht passt.</p>
<p>wenn du weißt, was drin ist, dann stellt sich mir die frage: warum nutzt du nicht void* und reinterpret_cast, das ist noch schneller... publicServiceAnnouncement hat schon recht, du optimierst an der falschen stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353471</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:55:35 GMT]]></title><description><![CDATA[<p>Aber redhead hat recht. Wenn du bei jedem Objekt genau sagen kannst, welchen typ es hat(weil sie immer abwechselnd kommen), dann spricht das schon sehr deutlich dafür, dass du eher 2 listen brauchst.</p>
<p>Hinzu kommt, dass dir bisher in jedem thread zum Thema casten gesagt wurde, dass casten grundsätzlich auf ein schlechtes Design hinausläuft, also würde ich an deiner Stelle mal überprüfen, ob die leute nicht mit ihrer Vermutung recht haben.</p>
<p>@ghost wenn man es genau weis, dann ist static_cast die richtige wahl. Es sind halt eben nicht immer nur ein paar ifs.</p>
<p>Und bei void* mit reinterpret_cast ist implementationsabhängig, was da rauskommt.Mal davon ab, dass man den letzten rest typsicherheit wegwirft.<br />
Und nur mal btw: static_cast kostet dich ganz genau 0 Takte. zumindest solange du keine virtuelle vererbung nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353472</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:55:31 GMT]]></title><description><![CDATA[<p>Du solltest dir nicht beim Design überlegen, ob eine einzelne Operation zuviel Zeit braucht. Wenn das Programm fertig ist und dann nicht schnell genug ist, nimmst du einen Profiler und schaust, wo die Zeit verbraucht wird. Meistens kann man dann durch nen schlaueren Algorithmus viel mehr rausholen, als durch das einsparen von ein paar Casts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353476</guid><dc:creator><![CDATA[publicServiceAnnouncement]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:55:34 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24375">@redhead</a>: schau dir mal mein ersten post an.. hätten sie keien gemeinsamkeit würd ich das natürlich nich tun.. die haben gleiceh basisattribute, aber unterscheiden sich eben in extra parametern!</p>
</blockquote>
<p>Da du in deinem Beispiel jedesmal castest scheint die gemeinsame Basisklasse in<br />
DEINEM Beipiel ja eben KEINE Rolle zu spielen. Bei Verwendung von virtuellen<br />
Funktionen und Überschreiben könntest du dir dann nämlich das casten sparen.<br />
<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/1353477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353477</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 06:58:53 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>@gho<strong>r</strong>st wenn man es genau weis, dann ist static_cast die richtige wahl. Es sind halt eben nicht immer nur ein paar ifs.</p>
</blockquote>
<p>was man ungefähr nie mit absoluter sicherheit sagen kann, wenn man nicht vorher mit anderen methoden geklärt hat, was das für ein objekt tatsächlich ist oder eben mit absoluter sicherheit weiß, was da passiert.</p>
<p>otze schrieb:</p>
<blockquote>
<p>Und bei void* mit reinterpret_cast ist implementationsabhängig, was da rauskommt.Mal davon ab, dass man den letzten rest typsicherheit wegwirft.</p>
</blockquote>
<p>ironie-detektor einschalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353482</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:03:10 GMT]]></title><description><![CDATA[<p>ghorst schrieb:</p>
<blockquote>
<p>oder eben mit absoluter sicherheit weiß, was da passiert.</p>
</blockquote>
<p>Was i.A. der Fall ist wenn man immer ein A und ein B in Folge in den Container packt <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>Ich bin auch der Meinung, wenn sicher ist, welches Objekt es ist, kann man static_cast nutzen. Wenn's dann kracht, ist es ein Programmierfehler wie ein Segfault oder Division durch Null.</p>
<p>Andere Sache Boris:<br />
Wenn IMMER ein A* und ein B* hintereinander in dem Container liegen, warum nutzt Du dann keinen Container von pair&lt;A*,B*&gt;? Dann kannst Du Dir die Casterei ganz sparen, und die Bedingung &quot;zu einem A gehört ein B&quot; wäre durch die Semantik schon leichter zu erfüllen. Vererbung kannst Du ja dennoch nutzen, um die Gemeinsamkeiten abzubilden, dabei muss die Vererbung nichtmal virtuell sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353485</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:07:00 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Wenn's dann kracht, ist es ein Programmierfehler wie ein Segfault oder Division durch Null.</p>
</blockquote>
<p>aus meiner sicht ist aber vor allem einer, den man nicht suchen möchte. <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/1353487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353487</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:10:49 GMT]]></title><description><![CDATA[<p>wie hoch ist die wahrscheinlichkeit das diese fehler auftritt wenn ich die liste so fülle:</p>
<pre><code class="language-cpp">for(int i=1; i&lt; x; i++){

 if(i%2)
   LISTE.Add(new A);
 else
   LISTE.Add(new B);
}
</code></pre>
<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353489</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:13:31 GMT]]></title><description><![CDATA[<p>ich glaub, so was nennt man dann designfehler. <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="😉"
    /><br />
bau dir, wie lordjaxom es vorschlug, ein struct, pair oder ähnliches und mach päarchen draus, dann sparst du dir das lästigen casten und erhältst einen sauberen code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353493</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:16:22 GMT]]></title><description><![CDATA[<p>das mit dem pair ist ja wunderschön... aber es muss nicht sein das es immer diese reihenfolge ist... es kann auch ein anderes muster sein...das ist das problem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353496</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 07:22:45 GMT]]></title><description><![CDATA[<p>wenn es regelmäßig ist und die periode nicht zu lang, kannst du immernoch eine struct benutzen oder eben für jede klasse eine eigene liste aufziehen. (der verwaltungsaufwand dafür ist auch nicht zu groß.)<br />
ansonsten hilft dir doch nur ein dynamic_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353501</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und static_cast Problematik on Tue, 28 Aug 2007 10:50:59 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Und nur mal btw: static_cast kostet dich ganz genau 0 Takte. zumindest solange du keine virtuelle vererbung nutzt.</p>
</blockquote>
<p>Also immer. Denn mit static_cast sind Downcasts aus einer virtuellen Basisklasse heraus sowieso nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353681</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Aug 2007 10:50:59 GMT</pubDate></item></channel></rss>