<?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[geht sowas in c++?]]></title><description><![CDATA[<p>guckt's euch bitte mal an.</p>
<pre><code>class Base1 {};
class Base2 {};

class A : public Base1 {};
class B : public Base1, Base2 {};

bool is_derived_from_Base2 (Base1 *x)
{
    // was muss hier reins?
    // irgendwas über RTTI wohl
    // aber was?
}

int main()
{
    A *a = new A;
    B *b = new B;

    is_derived_from_Base2 (a);  // muss false ergeben
    is_derived_from_Base2 (b);  // muss true ergeben
}
</code></pre>
<p>geht sowas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/151642/geht-sowas-in-c</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:08:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/151642.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jun 2006 12:16:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 12:16:24 GMT]]></title><description><![CDATA[<p>guckt's euch bitte mal an.</p>
<pre><code>class Base1 {};
class Base2 {};

class A : public Base1 {};
class B : public Base1, Base2 {};

bool is_derived_from_Base2 (Base1 *x)
{
    // was muss hier reins?
    // irgendwas über RTTI wohl
    // aber was?
}

int main()
{
    A *a = new A;
    B *b = new B;

    is_derived_from_Base2 (a);  // muss false ergeben
    is_derived_from_Base2 (b);  // muss true ergeben
}
</code></pre>
<p>geht sowas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087549</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 12:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 12:43:19 GMT]]></title><description><![CDATA[<p>das geht nur, wenn Base1 polymorph ist. dann könnte man schreiben:</p>
<pre><code class="language-cpp">bool is_derived_from_Base2 (Base1 *x)
{
    return dynamic_cast&lt;Base2*&gt;(x) != 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1087581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087581</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 12:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 13:09:34 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>das geht nur, wenn Base1 polymorph ist.</p>
</blockquote>
<p>shit <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 />
gibts nicht sowas wie 'instanceof' in java? irgendein trick, von mir aus auch mit c casts?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087619</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 13:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 13:19:16 GMT]]></title><description><![CDATA[<p>da in java alle klassen polymorph sind, stellt das keine verschlechterung dar. und nein, es gibt keine möglichkeit, es sei denn Base1 ode Base2 haben irgendwein eigenes interface für einen derartigen übergang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087628</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 13:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 15:29:01 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>da in java alle klassen polymorph sind, stellt das keine verschlechterung dar.</p>
</blockquote>
<p>hab ich versucht, Base1 eine virtuelle funktion verpasst, geht aber nicht <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="😞"
    /><br />
es wird compiliert, aber der cast scheint nicht zu klappen (gibt immer false zurück)<br />
ich poste hier mal nen java code der sowas macht:</p>
<pre><code>interface I1 {}
interface I2 {}

class C1 implements I1 {}
class C2 implements I1, I2 {}

public class Ftest 
{
	public static boolean is_derived_from_I2 (I1 x)
	{
		return x instanceof I2;	
	}

	public static void main (String[] args) 
    	{
		C1 c1 = new C1();
		C2 c2 = new C2();

		System.out.println(is_derived_from_I2(c1)); // false   	
		System.out.println(is_derived_from_I2(c2)); // true   	
	}
}
</code></pre>
<p>wie würde man sowas in c++ machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087745</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 15:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 15:30:17 GMT]]></title><description><![CDATA[<p>Alexandrescu hat in modern c++ design sowas gebastelt, musst du mal in seiner loki-lib (gibts auf <a href="http://sourceforge.net" rel="nofollow">sourceforge.net</a>) suchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087748</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Wed, 28 Jun 2006 15:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 15:33:37 GMT]]></title><description><![CDATA[<p>Das was dir camper gesagt hat, ist doch sozusagen das instanceof von Java. Du kannst damit das gleiche erreichen. Anstatt das ein true oder false zurück kommt, kommt halt ein ungültiger oder gültiger Pointer (bei Referenzen wird eine Exception geworfen).</p>
<p>Wenn es bei dir zur Laufzeit nicht funktioniert, obwohl das objekt polymorph ist, hast du vielleicht kein RTTI in deinem Compiler eingeschaltet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087750</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 28 Jun 2006 15:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 15:39:07 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Wenn es bei dir zur Laufzeit nicht funktioniert, obwohl das objekt polymorph ist, hast du vielleicht kein RTTI in deinem Compiler eingeschaltet?</p>
</blockquote>
<p>doch, rtti ist aktiv. ohne rtti crashed das dynamic_cast. irgendwie geht's nicht bei mir. ich benutze visual studio 2002...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087753</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 15:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 15:54:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Base1 { public: virtual ~Base1() {} };
</code></pre>
<p>sonst wie im ersten post. wenn es damit nicht geht, ist dein compiler kaputt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087760</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 15:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 16:19:52 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Base1 { public: virtual ~Base1() {} };
</code></pre>
<p>sonst wie im ersten post. wenn es damit nicht geht, ist dein compiler kaputt.</p>
</blockquote>
<p>ich hab jetzt folgenden code in dev-cpp getestet</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;

class Base1 {public: virtual ~Base1() {} };
class Base2 {};

class A : public Base1 {};
class B : public Base1, Base2 {};

bool is_derived_from_Base2 (Base1 *x)
{
    return dynamic_cast&lt;Base2*&gt;(x) != 0;
}

int main()
{
    A *a = new A;
    B *b = new B;

    bool b1 = is_derived_from_Base2 (a);  // muss false ergeben
    bool b2 = is_derived_from_Base2 (b);  // muss true ergeben

    std::cout &lt;&lt; b1 &lt;&lt; ' ' &lt;&lt; b2 &lt;&lt; std::endl;
}
</code></pre>
<p>schmeisst bei mir 0 0 raus <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 />
rtti ist doch für gewöhnlich eingeschaltet beim gcc oder?<br />
(man muss es mit -fno-rtti abschalten wenn man's nicht haben will).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087776</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 16:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 16:27:19 GMT]]></title><description><![CDATA[<p>du brauchst mindestens eine virtuelle methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087782</guid><dc:creator><![CDATA[.w]]></dc:creator><pubDate>Wed, 28 Jun 2006 16:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 16:29:51 GMT]]></title><description><![CDATA[<p>.w schrieb:</p>
<blockquote>
<p>du brauchst mindestens eine virtuelle methode.</p>
</blockquote>
<p>hab ich gerade gemacht</p>
<pre><code>class Base1 
{
      public: 
      virtual ~Base1() {} 
      virtual void dummy() {}
};
</code></pre>
<p>...ändert nix <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="😞"
    /> <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="😞"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1087783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087783</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 28 Jun 2006 16:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 16:39:00 GMT]]></title><description><![CDATA[<pre><code>class B : public Base1, [b]public[/b] Base2 {};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1087789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087789</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 16:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 17:00:47 GMT]]></title><description><![CDATA[<p>Dr. Prof schrieb:</p>
<blockquote>
<p>Alexandrescu hat in modern c++ design sowas gebastelt, musst du mal in seiner loki-lib (gibts auf <a href="http://sourceforge.net" rel="nofollow">sourceforge.net</a>) suchen</p>
</blockquote>
<p>Das war aber iirc die Compiletime Variante, für die der eigentliche Typ schon bekannt sein muss.</p>
<p>So klappts:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;FerrisLoki/TypeManip.h&gt;

using namespace Loki;

class Base1 {};
class Base2 { public: virtual ~Base2 () {} };

class A : public Base1 {};
class B : public Base1, public Base2 {};

template &lt;typename T, typename U&gt;
bool is_derived_from_impl (U* x, Int2Type&lt;0&gt;)
{
    return false;
}

template &lt;typename T, typename U&gt;
bool is_derived_from_impl (U* x, Int2Type&lt;1&gt;)
{
    return dynamic_cast&lt;T*&gt; (x) != 0;
}

template &lt;typename T, typename U&gt;
bool is_derived_from (U* x)
{
    return is_derived_from_impl&lt;T&gt; (x, Int2Type&lt;SuperSubclass&lt;T, U&gt;::value ? 1 : 0&gt; ());
}

int main()
{
    A* a = new A;
    B* b = new B;

    std::cout &lt;&lt; is_derived_from&lt;Base2&gt; (a) &lt;&lt; std::endl;  // muss false ergeben
    std::cout &lt;&lt; is_derived_from&lt;Base2&gt; (b) &lt;&lt; std::endl;  // muss true ergeben
}
</code></pre>
<p>/edit: Sorry, hatte campers Post nicht gesehen. Aber zumindest bei mir war der Rest der Änderungen auch nötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087804</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 28 Jun 2006 17:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 17:57:18 GMT]]></title><description><![CDATA[<p>allerdinsg ist</p>
<pre><code class="language-cpp">Base1* c = new B;
    std::cout &lt;&lt; is_derived_from&lt;Base2&gt; (c) &lt;&lt; std::endl;  // ergibt false
</code></pre>
<p>mit deiner variante, filmor. es ging ja gerade darum, einen cross-casts durchzuführen. im übrigen würde ich hier boosts is_convertible benutzen - ist schließlich das, was wir irgendwann im standard sehen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087837</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 17:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 18:22:20 GMT]]></title><description><![CDATA[<p>Stimmt, aber ohne den Code oben hats bei mir nicht kompiliert. Loki hab ich nur verwendet, um auf Dr. Prof's Post näher einzugehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087861</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 28 Jun 2006 18:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 19:24:49 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Stimmt, aber ohne den Code oben hats bei mir nicht kompiliert.</p>
</blockquote>
<p>Base1 ist bei dir auch nicht polymorph. das argument muss polymorph sein, nicht der zieltyp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087902</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 19:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Wed, 28 Jun 2006 20:09:53 GMT]]></title><description><![CDATA[<p>Autsch ... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1087924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087924</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 28 Jun 2006 20:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to geht sowas in c++? on Thu, 29 Jun 2006 08:03:34 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code>class B : public Base1, [b]public[/b] Base2 {};
</code></pre>
</blockquote>
<p>hey, danke, das war's <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="🙂"
    /><br />
sorry, aber ich bin c-freak. bei c++ fehlt mir einfach die praxis...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088115</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 29 Jun 2006 08:03:34 GMT</pubDate></item></channel></rss>