<?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[Prüfen ob Klasse erbt:]]></title><description><![CDATA[<pre><code>template&lt;class B,class A&gt;
struct B_erbt_von_A{
    //Nimmt Objekte an die von A erben
    static char foo(A*);
    //Nimmt alles andere an
    static double foo(...);
    //Erzeugt ein Objekt von B(B-Konstruktor könnte private sein. bei direktem new =&gt; Fehler)
    static B* make();
    //Je nachdem welches Foo aufgerufen wird, Ergebnis bestimmen
    enum{yes=sizeof(foo(make())) == sizeof(char)};
};

class A1{
 virtual void X();
}
class B1{

}

B1 t;
if(B_erbt_von_A&lt;B1,A1&gt;::yes)
  t.X();
</code></pre>
<p>Leider kompiliert er mir das nicht. Wo liegt der Fehler? Laut meinem prof müsste das gehen.</p>
<p>//Edit: Der Befehl if(B_erbt_von_A&lt;B1,A1&gt;::yes) sollte angeblich schon zur Compilezeit ausgewertet werden und so Compilerfehler (wegen dem fehlenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> verhindern)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332391/prüfen-ob-klasse-erbt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 03:44:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332391.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Apr 2015 16:06:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:37:26 GMT]]></title><description><![CDATA[<pre><code>template&lt;class B,class A&gt;
struct B_erbt_von_A{
    //Nimmt Objekte an die von A erben
    static char foo(A*);
    //Nimmt alles andere an
    static double foo(...);
    //Erzeugt ein Objekt von B(B-Konstruktor könnte private sein. bei direktem new =&gt; Fehler)
    static B* make();
    //Je nachdem welches Foo aufgerufen wird, Ergebnis bestimmen
    enum{yes=sizeof(foo(make())) == sizeof(char)};
};

class A1{
 virtual void X();
}
class B1{

}

B1 t;
if(B_erbt_von_A&lt;B1,A1&gt;::yes)
  t.X();
</code></pre>
<p>Leider kompiliert er mir das nicht. Wo liegt der Fehler? Laut meinem prof müsste das gehen.</p>
<p>//Edit: Der Befehl if(B_erbt_von_A&lt;B1,A1&gt;::yes) sollte angeblich schon zur Compilezeit ausgewertet werden und so Compilerfehler (wegen dem fehlenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> verhindern)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451705</guid><dc:creator><![CDATA[RichardEb]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 16:28:08 GMT]]></title><description><![CDATA[<p>Es soll Compiler geben, die Fehlermeldungen ausgeben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451708</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 27 Apr 2015 16:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 16:32:03 GMT]]></title><description><![CDATA[<p>nach deinen Klassen fehlt ; und dein t hat kein X - egal was du anstellst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451709</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Mon, 27 Apr 2015 16:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:01:15 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<p>und dein t hat kein X - egal was du anstellst</p>
</blockquote>
<p>Das soll ja genau der Aufruf if(B_erbt_von_A&lt;B1,A1&gt;::yes) prüfen und einen Compiler-Fehler verhindern. Nur warum klappt das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451728</guid><dc:creator><![CDATA[RichardEb]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:21:14 GMT]]></title><description><![CDATA[<p>Welche Fehlermeldung wird denn ausgegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451732</guid><dc:creator><![CDATA[moin354]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:32:36 GMT]]></title><description><![CDATA[<p>moin354 schrieb:</p>
<blockquote>
<p>Welche Fehlermeldung wird denn ausgegeben?</p>
</blockquote>
<p>error: 'class B' has no member named 'X'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451734</guid><dc:creator><![CDATA[RichardEb]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:32:36 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:43:21 GMT]]></title><description><![CDATA[<p>Ja, genau weil die Klasse B auch keinen Member X hat.<br />
Dein Programm überprüft dies zwar, jedoch wird es vom Compiler schon überprüft, bevor dein Programm ausgeführt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451740</guid><dc:creator><![CDATA[moin354]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:43:21 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:50:31 GMT]]></title><description><![CDATA[<p>moin354 schrieb:</p>
<blockquote>
<p>Ja, genau weil die Klasse B auch keinen Member X hat.<br />
Dein Programm überprüft dies zwar, jedoch wird es vom Compiler schon überprüft, bevor dein Programm ausgeführt wird.</p>
</blockquote>
<p>Dieses struct Konstrukt soll ja eben schon vom Compiler ausgewertet werden können (angeblich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451743</guid><dc:creator><![CDATA[RichardEb]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 18:56:24 GMT]]></title><description><![CDATA[<p>Die Struktur ist ja auch nicht das Problem, sondern der Aufruf der nicht vorhandenen Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451745</guid><dc:creator><![CDATA[moin354]]></dc:creator><pubDate>Mon, 27 Apr 2015 18:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 19:02:51 GMT]]></title><description><![CDATA[<p>moin354 schrieb:</p>
<blockquote>
<p>Die Struktur ist ja auch nicht das Problem, sondern der Aufruf der nicht vorhandenen Methode.</p>
</blockquote>
<p>Wenn die struct vom compiler ausgewertet werden würde, würde es keinen Fehler geben. Dort steht nämlich ganz klar:</p>
<p>if(B_erbt_von_A&lt;B1,A1&gt;::yes)<br />
t.X();</p>
<p>Wenn der Compiler das B_erbt_von_A auswerten könnte - So wie der Prof es sagt - würde er wissen, dass t.X() gar nicht aufgerufen werden kann und somit keinen Fehler werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451746</guid><dc:creator><![CDATA[RichardEb]]></dc:creator><pubDate>Mon, 27 Apr 2015 19:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 19:07:51 GMT]]></title><description><![CDATA[<p>Es ist dem Compiler egal. Schau mal dieses Beispiel ruft den selben Fehler hervor.</p>
<pre><code>class B1
	{

	};

	B1 t;

	if (0 == 1)
		t.X();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2451748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451748</guid><dc:creator><![CDATA[moin354]]></dc:creator><pubDate>Mon, 27 Apr 2015 19:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 21:50:47 GMT]]></title><description><![CDATA[<p>Falls du den gcc hast kannst du ja mal das versuchen:</p>
<blockquote>
<p>SSA Aggressive Dead Code Elimination. Turned on by the `-fssa-dce' option. This pass performs elimination of code considered unnecessary because it has no externally visible effects on the program. It operates in linear time.</p>
</blockquote>
<p>(<a href="http://www.delorie.com/gnu/docs/gcc/gccint_30.html" rel="nofollow">http://www.delorie.com/gnu/docs/gcc/gccint_30.html</a><br />
Ich weiß nicht, wie 'aggresiv' das ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451770</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 27 Apr 2015 21:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Mon, 27 Apr 2015 22:40:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23734">@Jockelx</a><br />
Erstmal muss die Show als gültiges C++ übersetzbar sein. Dann wird optimiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32128">@RichardEb</a><br />
Du musst ein Hilfstempalte machen das X aufruft.<br />
Ala</p>
<pre><code class="language-cpp">template &lt;class T, bool = erbt_von&lt;T, A&gt;::value&gt;
struct XOderNix
{
    static void X(T&amp;) {}
};

template &lt;class T&gt;
struct XOderNix&lt;T, true&gt;
{
    static void X(T&amp; t) { t.X(); }
};

// ...
{
    B1 b;
    XOderNix&lt;B1&gt;::X(b);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2451775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451775</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 27 Apr 2015 22:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Tue, 28 Apr 2015 10:07:00 GMT]]></title><description><![CDATA[<p>warum nicht einfach std::is_base_of verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451838</guid><dc:creator><![CDATA[kurze_frage]]></dc:creator><pubDate>Tue, 28 Apr 2015 10:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Tue, 28 Apr 2015 10:14:27 GMT]]></title><description><![CDATA[<p>kurze_frage schrieb:</p>
<blockquote>
<p>warum nicht einfach std::is_base_of verwenden?</p>
</blockquote>
<p>Auch gut.<br />
Der &quot;is_base_of&quot; Teil ist hier bloss nicht das Problem.<br />
Das Problem ist dass RichardEb nicht verstanden hat dass C++ (noch?) kein &quot;static if&quot; kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451842</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2015 10:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Tue, 28 Apr 2015 12:52:24 GMT]]></title><description><![CDATA[<p>ich probiers noch mal</p>
<p>RichardEb schrieb:</p>
<blockquote>
<p>//Edit: Der Befehl if(B_erbt_von_A&lt;B1,A1&gt;::yes) sollte angeblich schon zur Compilezeit ausgewertet werden und so Compilerfehler (wegen dem fehlenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f635.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--dizzy_face"
      title="X)"
      alt="😵"
    /> verhindern)</p>
</blockquote>
<p>geht nicht std::is_member_pointer um festzustellen ob es eine Funktion X gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451875</guid><dc:creator><![CDATA[kurze_frage]]></dc:creator><pubDate>Tue, 28 Apr 2015 12:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Klasse erbt: on Tue, 28 Apr 2015 21:36:04 GMT]]></title><description><![CDATA[<p>Vielleicht.<br />
Ich frage mich nur was das mit der Fragestellung zu tun haben soll.<br />
Der OP hat erstmal primär ein ganz anderes Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2451917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2451917</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2015 21:36:04 GMT</pubDate></item></channel></rss>