<?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[static_cast&amp;lt;&amp;gt; für upcast?]]></title><description><![CDATA[<p>Hallo</p>
<p>angenommen, ich habe eine basisklasse &quot;base&quot; und eine abgeleitete klasse<br />
&quot;derived&quot;, sowie eine weitere klasse, die per MI als basis für &quot;derived&quot; dient.</p>
<pre><code class="language-cpp">class base
{
};
class stuff // stellvertreter für etwas anderes
{
};
class derived : public base, public stuff
{
};
</code></pre>
<p>und angenommen, ich habe ein objekt, was zu 100% ein &quot;derived&quot; ist,<br />
sowie ein &quot;base&quot; pointer darauf:</p>
<pre><code class="language-cpp">derived d;
base *b = &amp;d;
</code></pre>
<p>darf ich dann davon ausgehen, dass ein &quot;static_cast&lt;derived *&gt;&quot; ein gültigen<br />
zeiger zurückliefert?</p>
<pre><code class="language-cpp">derived *pd = static_cast&lt;derived *&gt;(b);

assert(&amp;d == pd);
</code></pre>
<p>könnte die mehrfachvererbung wegen this-verschiebung problematisch werden?</p>
<p>ich möchte nur auf jeden fall dynamic_cast vermeiden.<br />
geht das?</p>
<p>MfG cast-spaß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256238/static_cast-lt-gt-für-upcast</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 08:06:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256238.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Dec 2009 21:47:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 21:47:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>angenommen, ich habe eine basisklasse &quot;base&quot; und eine abgeleitete klasse<br />
&quot;derived&quot;, sowie eine weitere klasse, die per MI als basis für &quot;derived&quot; dient.</p>
<pre><code class="language-cpp">class base
{
};
class stuff // stellvertreter für etwas anderes
{
};
class derived : public base, public stuff
{
};
</code></pre>
<p>und angenommen, ich habe ein objekt, was zu 100% ein &quot;derived&quot; ist,<br />
sowie ein &quot;base&quot; pointer darauf:</p>
<pre><code class="language-cpp">derived d;
base *b = &amp;d;
</code></pre>
<p>darf ich dann davon ausgehen, dass ein &quot;static_cast&lt;derived *&gt;&quot; ein gültigen<br />
zeiger zurückliefert?</p>
<pre><code class="language-cpp">derived *pd = static_cast&lt;derived *&gt;(b);

assert(&amp;d == pd);
</code></pre>
<p>könnte die mehrfachvererbung wegen this-verschiebung problematisch werden?</p>
<p>ich möchte nur auf jeden fall dynamic_cast vermeiden.<br />
geht das?</p>
<p>MfG cast-spaß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820352</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Wed, 09 Dec 2009 21:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 21:50:16 GMT]]></title><description><![CDATA[<p>mist, ich meinte downcast -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820353</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Wed, 09 Dec 2009 21:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 21:52:07 GMT]]></title><description><![CDATA[<p>Das ist ein Downcast..</p>
<p>Und warum willst du dynamic_cast nicht verwenden? Der ist ja genau für das da und mit dem kannst du auch prüfen, ob die Konvertierung geklappt hat.</p>
<p>Im übrigen solltest du vlt. nochmal darüber nachdenken, ob der Downcast überhaupt nötig ist..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820354</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Dec 2009 21:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 22:11:58 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Und warum willst du dynamic_cast nicht verwenden? Der ist ja genau für das da und mit dem kannst du auch prüfen, ob die Konvertierung geklappt hat.</p>
</blockquote>
<p>Ohne RTTI ist kein dynamic_cast möglich, da muss man sicher sein, dass es geht und einen static_cast machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820357</guid><dc:creator><![CDATA[Superlexx]]></dc:creator><pubDate>Wed, 09 Dec 2009 22:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 22:32:07 GMT]]></title><description><![CDATA[<p>Superlexx schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Und warum willst du dynamic_cast nicht verwenden? Der ist ja genau für das da und mit dem kannst du auch prüfen, ob die Konvertierung geklappt hat.</p>
</blockquote>
<p>Ohne RTTI ist kein dynamic_cast möglich, da muss man sicher sein, dass es geht und einen static_cast machen.</p>
</blockquote>
<p>Was willst du mir damit sagen?<br />
RTTI ist involviert man darf es benutzen und muss es nicht selbst von Hand nachbauen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820362</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Dec 2009 22:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Wed, 09 Dec 2009 22:32:46 GMT]]></title><description><![CDATA[<p>cast-spaß schrieb:</p>
<blockquote>
<p>und angenommen, ich habe ein objekt, was zu 100% ein &quot;derived&quot; ist, sowie ein &quot;base&quot; pointer darauf:<br />
[...]<br />
darf ich dann davon ausgehen, dass ein &quot;static_cast&lt;derived *&gt;&quot; ein gültigen<br />
zeiger zurückliefert?</p>
</blockquote>
<p>Ja.</p>
<p>cast-spaß schrieb:</p>
<blockquote>
<p>könnte die mehrfachvererbung wegen this-verschiebung problematisch werden?</p>
</blockquote>
<p>Nein, <code>static_cast</code> sorgt in diesem Fall für einen korrekten Downcast. Allerdings nur, solange <code>base</code> keine virtuelle Basisklasse von <code>derived</code> ist. Und du musst dir wirklich sicher sein, ansonsten hast du undefiniertes Verhalten.</p>
<p>Wenn du Sicherheit im Debug-Modus und Effizienz im Release-Modus erreichen möchtest, kannst du dir einmal <code>boost::polymorphic_downcast</code> anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820363</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Dec 2009 22:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 11:50:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>cast-spaß schrieb:</p>
<blockquote>
<p>könnte die mehrfachvererbung wegen this-verschiebung problematisch werden?</p>
</blockquote>
<p>Nein, <code>static_cast</code> sorgt in diesem Fall für einen korrekten Downcast. Allerdings nur, solange <code>base</code> keine virtuelle Basisklasse von <code>derived</code> ist. Und du musst dir wirklich sicher sein, ansonsten hast du undefiniertes Verhalten.</p>
</blockquote>
<p>jo, ich bin mir sicher. mehr als 100% geht doch nicht? <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>allerdings <strong>ist</strong>, <code>base</code> eine virtuelle basisklasse von `derived[/b].</p>
<p>wenn ein statischer upcast möglich ist, warum dann nicht auch ein statischer</p>
<p>downcast?</p>
<p>boost verwendet intern auch nur einen [c]static_cast` .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820514</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Thu, 10 Dec 2009 11:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 12:33:36 GMT]]></title><description><![CDATA[<p>cast-spaß schrieb:</p>
<blockquote>
<p>allerdings <strong>ist</strong>, <code>base</code> eine virtuelle basisklasse von [c]derived[/b]. wenn ein statischer upcast möglich ist, warum dann nicht auch ein statischer downcast?</p>
</blockquote>
<p>Weil die Lage des virtuellen Basisklassensubobjektes relativ zu davon abgeleiteten Subobjekten vom Typ des vollständigen Objektes abhängt. Im Falle eines Basisklassenpointers ist der vollständige Typ aber werder bekannt, noch kann er im Falle nichtpolymorpher Klassen ermittelt werden, und es gibt keine Möglichkeit, dies dem Castoperator mitzuteilen.<br />
Eine implizite Konvertierung eines Zeigers auf ein Objekt einer abgeleiteten Klasse in einen Zeiger auf das virtuelle Basisklassensubobjekt ist deshalb möglich, weil hierfür zusätzliche Informationen im Objekt gespeichert werden. Als Faustregel kann man davon ausgehen, dass für jede virtuelle Basisklasse, die nicht indirekt vererbt wird, im abgeleiteten Objekt ein zusätzlicher Zeiger existiert, der während der Konstruktion automatisch initialisiert wird.</p>
<p>Mit ein bisschen Voodoo, kann man den Cast doch noch durchführen, im Zweifelsfall sollte aber eher das Design überdacht werden. Voraussetzung hierfür ist, dass der vollständige Typ des Objektes bekannt ist, und ein Objekt dieses Typs angelegt wurde. Da alle vollständigen Objekte das gleiche Layout haben, können wir ansetzen:</p>
<pre><code class="language-cpp">Derived* virtual_downcast(Base* p)
{
    static complete_type prototype(...);
    static const std::diffptr_t delta = reinterpret_cast&lt;char*&gt;( &amp;prototype ) - reinterpret_cast&lt;char*&gt;( static_cast&lt;Base*&gt;( &amp;prototype ) );
    return reinterpret_cast&lt;complete_type*&gt;( reinterpret_cast&lt;char*&gt;( p ) + delta );
}
</code></pre>
<p>Sieht böse aus, ist es auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820543</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 12:54:32 GMT]]></title><description><![CDATA[<p>sowas ähnliches dachte ich mir bereits <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>in meinem fall ist aber der <strong>vollständige</strong> typ von <code>derived</code><br />
bekannt.</p>
<pre><code class="language-cpp">struct Interface
{
    virtual void func() = 0;
};
struct SpecialInterface : virtual public Interface
{
    virtual void foo() = 0;
};
/////////////////////////////////////////////////////////
class Impl : virtual public Interface
{
public:
    void func(); // nicht abstrakt, implementationsklasse
};
class SpecialImpl : virtual public SpecialInterface, public Impl
{
public:
    void foo();
};
void do_something(SpecialInterface *ptr)
{
    // hier ist der vollständige typ von SpecialImpl bekannt.
    // ptr ist zu 100% ein SpecialImpl!
    SpecialImpl *impl = static_cast&lt;SpecialImpl *&gt;(ptr); // erlaubt?
}
int main()
{
    SpecialInterface *ptr = new SpecialImpl;
    do_something(ptr);
    delete ptr;
}
</code></pre>
<p>in diesem A B C D diagramm (b und c erben von a, d von b und c)<br />
möchte ich <strong>nicht</strong> von A nach D, sondern von B nach D.<br />
alle typen sind vollstädnig bekannt.</p>
<p>afaik muss <code>static_cast</code> evtl beim cast von D nach B den this-pointer<br />
verändern, je nachdem wo B liegt. dieser offset muss <strong>compiletime-konstant</strong><br />
sein, da die klassen sich nicht ändern.</p>
<p>jetzt möchte ich nur den umgekehrten weg gehen. B -&gt; D. B <strong>ist</strong> ein D.<br />
natürlich könnte man den voodoo-hack nehmen (:D) und einfach den offset abziehen,<br />
aber kann <code>static_cast</code> das nicht auch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820556</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:54:32 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 14:58:34 GMT]]></title><description><![CDATA[<p>warum benutzt du hier die virtuelle Vererbung? Das Ding kommt eigentlich nie(!) vor. Außer natürlich, du hast ein schlechtes Design (wie zum Beispiel nen kombinierten input/outputstream *hust*)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820685</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 15:07:24 GMT]]></title><description><![CDATA[<p>cast-spaß schrieb:</p>
<blockquote>
<p>afaik muss <code>static_cast</code> evtl beim cast von D nach B den this-pointer<br />
verändern, je nachdem wo B liegt. dieser offset muss <strong>compiletime-konstant</strong><br />
sein, da die klassen sich nicht ändern.</p>
<p>jetzt möchte ich nur den umgekehrten weg gehen. B -&gt; D. B <strong>ist</strong> ein D.<br />
natürlich könnte man den voodoo-hack nehmen (:D) und einfach den offset abziehen,<br />
aber kann <code>static_cast</code> das nicht auch?</p>
</blockquote>
<p>Niemand teilt static_cast den vollständigen Typ mit, also nein. Die einzige Möglichkeit, die mir auf Anhieb einfällt, ist das Offset explizit in den Quellcode zu schreiben und dann bei der Ausführung zu testen, ob der Wert stimmt, oder ggf. beim Konfigurieren des Projekts ein kleines Script auszuführen, dass diesen Wert ermittelt und diesen beim Compilieren weiterzugeben.</p>
<p>Warum hier virtuelle Vererbung zwischen SpecialInterface und SpecialImpl benutzt wird, erschließt sich mir ebensowenig wie otze.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820692</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 15:10:02 GMT]]></title><description><![CDATA[<p>weil ich damit erzwinge, dass die konkrete funktion die abstrakte überschreibt,<br />
und nicht anderherum. habe ich vor langer zeit herausgefunden, und seitdem<br />
immer für interfaces genommen.</p>
<p>ich möchte auch wirklich nur ein objekt der basisklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820697</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 16:02:42 GMT]]></title><description><![CDATA[<p>Ahh ich sehs grad...dein Design ist wahrscheinlich ziemlich wirr...</p>
<p>Das Poblem ist, dass du SpecialImpl von Impl erben lässt...das ist meistens nicht gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820746</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 10 Dec 2009 16:02:42 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 16:41:02 GMT]]></title><description><![CDATA[<p>warum sollte das nicht gut sein?</p>
<p>ich vermeide so das erneute definieren von jeweils 5 funktionen in ~70 klassen.<br />
das bringt schon etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820777</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Thu, 10 Dec 2009 16:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 16:42:59 GMT]]></title><description><![CDATA[<p>cast-spaß schrieb:</p>
<blockquote>
<p>ich vermeide so das erneute definieren von jeweils 5 funktionen in ~70 klassen.<br />
das bringt schon etwas.</p>
</blockquote>
<p>Wär das nicht ein Fall von: das gehört ins Interface, weil es eh in allen Klassen gleich ist?</p>
<p>C++ ist nicht Java.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820780</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 10 Dec 2009 16:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Thu, 10 Dec 2009 21:22:25 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>cast-spaß schrieb:</p>
<blockquote>
<p>ich vermeide so das erneute definieren von jeweils 5 funktionen in ~70 klassen.<br />
das bringt schon etwas.</p>
</blockquote>
<p>Wär das nicht ein Fall von: das gehört ins Interface, weil es eh in allen Klassen gleich ist?</p>
<p>C++ ist nicht Java.</p>
</blockquote>
<p>java *igitt*</p>
<p>Ist ja auch alles im Interface, aber die vererbungshierachie der Interfaces<br />
möchte ich auch in der klassenstruktur nachbilden. d.h.</p>
<pre><code>klassen | interface
        |
  CA  &lt;-|-  A
   |    |   |
   v    |   v
  CB  &lt;-|-  B
   |    |   |
   v    |   v
  CC  &lt;-|-  C
</code></pre>
<p>A, B und C sind die interfaces. ich kenne genug libarys, deren öffendliche<br />
schnittstelle auf vererbung basiert.</p>
<p>die einzige gute möglichkeit ist halt die mehrfachvererbung.</p>
<p>ich hatte es auch schon mal mit class-chaining versucht, via templates.<br />
aber das war eine katastrophe, sprich _nicht_ schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820968</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Thu, 10 Dec 2009 21:22:25 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Sat, 12 Dec 2009 17:02:33 GMT]]></title><description><![CDATA[<p>ich bins nochmal <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="😞"
    /></p>
<pre><code class="language-cpp">// öffentliches interface
struct Base
{
	virtual void func() = 0;
};
struct Interface : virtual public Base //// &lt;-- ES GEHT UM DAS VIRTUAL HIER
{
	virtual void specialfunc() = 0;
};
//////////// ab hier die implemenatation
class CBase : virtual public Base
{
	void func(){}
};
class CInterface : virtual public Interface, public CBase
{
	void specialfunc(){}
};

int main()
{
	CInterface *ptr = new CInterface;
	Interface *iptr = ptr;
	Base *b = iptr;
	Interface *iptr2 = static_cast&lt;Interface *&gt;(b); // geht nicht :(
}
</code></pre>
<p><strong>mit dem virtual</strong> kann er nicht von <code>Base *</code> zu <code>Interface *</code><br />
koonvertieren, <strong>ohne virtual</strong> überschreibt meine funktion das interface<br />
nicht, und die funktion ist <strong>immer noch abstrakt</strong>.</p>
<p>wie kann ich das umgehen? ab besten ohne solche haXXs, das muss doch gehen.<br />
<strong>ohne dynmaic_cast</strong> <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>MfG cast-spaß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821627</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Sat, 12 Dec 2009 17:02:33 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Sun, 13 Dec 2009 10:59:18 GMT]]></title><description><![CDATA[<p>Nein, virtual macht dir alles kaputt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821889</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 13 Dec 2009 10:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Sun, 13 Dec 2009 11:44:13 GMT]]></title><description><![CDATA[<p>Warum willst du eigentlich keinen dynamic_cast verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821904</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to static_cast&amp;lt;&amp;gt; für upcast? on Sun, 13 Dec 2009 11:56:30 GMT]]></title><description><![CDATA[<p>es ist zu langsam.</p>
<p>grade die msvc-implementierung ist eine katastrophe. irgentwo meine ich<br />
gelesen zu haben, dass die funktion klasseninfos aus der .exe liest.</p>
<p>meine jetzige lösung ist eine virtuelle methode in dem interface, void *Downcast()</p>
<p>der teil ist wirklich performancekritisch und wird tausende male aufgerufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821910</guid><dc:creator><![CDATA[cast-spaß]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:56:30 GMT</pubDate></item></channel></rss>