<?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[Virtuelle Methoden Pointer]]></title><description><![CDATA[<p>Hi Leute ich arbeite gerade an einer reflection lib und ich bin so gut wie fertig, nur fehlt mir noch etwas: Support für Virtuelle Methoden, dazu ein kleines Beispiel:</p>
<pre><code class="language-cpp">class Base
{
public:
    virtual void Test( )      { cout &lt;&lt; &quot;Base::Test( )&quot; &lt;&lt; endl; }
};

class Derived : public Base
{
public:
    virtual void Test( )      { cout &lt;&lt; &quot;Derived::Test( )&quot; &lt;&lt; endl; }
};

Derived* object = new Derived( );
object-&gt;Test( );        // output: Derived::Test( )
object-&gt;Base::Test( );  // output: Base::Test( )

void (Base::*BaseMethodPtr)( );
void (Derived::*DerivedMethodPtr)( );

BaseMethodPtr = &amp;Base::Test;
DerivedMethodPtr = &amp;Derived::Test;
(object-&gt;*BaseMethodPtr)( );     // output: Derived::Test( )
(object-&gt;*DerivedMethodPtr)( );  // output: Derived::Test( )
</code></pre>
<p>Meine Frage: Wie kann ich mit dem BaseMethodPtr auch die Base Methode aufrufen (also praktisch das &quot;virtuelle&quot; umgehen)?<br />
Ich suche etwas in der Art von (object-&gt;Base::*BaseMethodPtr)( ) [was nicht kompilierbar ist].</p>
<p>Auf Anhieb würde mir da ein Zugriff auf die virtual method table einfallen, da müsste ich dann aber wissen wie oft ich ableite und die wie vielte virtuelle Methode Test( ) ist. Die Anzahl der Ableitungen/Vererbungen kann ich noch rausbekommen, die anzahl der virtuellen Methoden jedoch eher nicht (zur not wäre es noch möglich).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275511/virtuelle-methoden-pointer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 00:08:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275511.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Oct 2010 19:47:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle Methoden Pointer on Sat, 16 Oct 2010 13:14:13 GMT]]></title><description><![CDATA[<p>Hi Leute ich arbeite gerade an einer reflection lib und ich bin so gut wie fertig, nur fehlt mir noch etwas: Support für Virtuelle Methoden, dazu ein kleines Beispiel:</p>
<pre><code class="language-cpp">class Base
{
public:
    virtual void Test( )      { cout &lt;&lt; &quot;Base::Test( )&quot; &lt;&lt; endl; }
};

class Derived : public Base
{
public:
    virtual void Test( )      { cout &lt;&lt; &quot;Derived::Test( )&quot; &lt;&lt; endl; }
};

Derived* object = new Derived( );
object-&gt;Test( );        // output: Derived::Test( )
object-&gt;Base::Test( );  // output: Base::Test( )

void (Base::*BaseMethodPtr)( );
void (Derived::*DerivedMethodPtr)( );

BaseMethodPtr = &amp;Base::Test;
DerivedMethodPtr = &amp;Derived::Test;
(object-&gt;*BaseMethodPtr)( );     // output: Derived::Test( )
(object-&gt;*DerivedMethodPtr)( );  // output: Derived::Test( )
</code></pre>
<p>Meine Frage: Wie kann ich mit dem BaseMethodPtr auch die Base Methode aufrufen (also praktisch das &quot;virtuelle&quot; umgehen)?<br />
Ich suche etwas in der Art von (object-&gt;Base::*BaseMethodPtr)( ) [was nicht kompilierbar ist].</p>
<p>Auf Anhieb würde mir da ein Zugriff auf die virtual method table einfallen, da müsste ich dann aber wissen wie oft ich ableite und die wie vielte virtuelle Methode Test( ) ist. Die Anzahl der Ableitungen/Vererbungen kann ich noch rausbekommen, die anzahl der virtuellen Methoden jedoch eher nicht (zur not wäre es noch möglich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966251</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 16 Oct 2010 13:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden Pointer on Sat, 16 Oct 2010 07:25:12 GMT]]></title><description><![CDATA[<p>Dein object ist vom type Base*, aber ja im Grunde ein Derived.</p>
<p>Du benötigst also ein object was tatsächlich vom type Base ist.<br />
Quasi sowas:</p>
<pre><code class="language-cpp">Base* object2 = reinterpret_cast&lt;Base*&gt;(object);
</code></pre>
<p>Oder anders ausgedrückt die vtable von object muss entsprechend als Base initialisiert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966331</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Sat, 16 Oct 2010 07:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Methoden Pointer on Sat, 16 Oct 2010 13:13:09 GMT]]></title><description><![CDATA[<p>Das hilft mir nicht weiter!<br />
Ich suche nach einer möglichkeit, bei einem object eine virtuelle Basis Methode aufzurufen und zwar mithilfe eines methoden pointers.</p>
<p>Dein cast vorschlag bringt eigentlich gar nichts, da mit und ohne cast die vtable die selbe ist (da dort bereits die virtuelle methode von derived existiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966406</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 16 Oct 2010 13:13:09 GMT</pubDate></item></channel></rss>