<?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[richtige Klasse finden]]></title><description><![CDATA[<p>Hallo erstmal.</p>
<p>Feindlage:<br />
Ich habe abgeleitet von einer Basisklasse zig (etwa 40) weitere Klassen, deren Inhalte ich speichern und laden kann. Jede Klasse ist natürlich spezifisch und behandelt die geladenen Daten unterschiedlich.</p>
<p>Eigene Lage:<br />
Ich bin ein Anfänger in C++ mit fundierten Kenntnissen in anderen Sprachen, sowie Assembler.</p>
<p>Problem:<br />
Wenn ich die Daten lade, bekomme ich anhand einer Typ-ID den Typ der Daten heraus. Nun will es mir aber nicht einfallen, wie daraus die richtige Klasse generieren könnte ohne, dass ich ne hässliche switch-Abfrage starte und jede gültige Typ-ID durchgehe.</p>
<p>Eigener Lösungsansatz:<br />
Ich dachte mir, dass ich Konstruktoren für jede Klasse baue und diese in einem Array abspeichere. Über den Index des Array würde ich dann die richtige Funktion bekommen, darüber ein initialisiertes Objekt der richtigen Klasse und alles wäre schön. Ich bekomme das nur nicht hin.</p>
<p>Feindliche Sabotagetrupps:<br />
Der Compiler meldet mir, dass ich keine Liste vom Typ Funktion erstellen kann. Selbst mit (void*) bin ich gescheitert.</p>
<p>Antrag:<br />
Kann mir jemand bei dem Problem helfen, oder eine andere vielleicht bessere Lösung zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143464/richtige-klasse-finden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 06:48:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143464.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Apr 2006 18:36:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to richtige Klasse finden on Sat, 08 Apr 2006 18:36:00 GMT]]></title><description><![CDATA[<p>Hallo erstmal.</p>
<p>Feindlage:<br />
Ich habe abgeleitet von einer Basisklasse zig (etwa 40) weitere Klassen, deren Inhalte ich speichern und laden kann. Jede Klasse ist natürlich spezifisch und behandelt die geladenen Daten unterschiedlich.</p>
<p>Eigene Lage:<br />
Ich bin ein Anfänger in C++ mit fundierten Kenntnissen in anderen Sprachen, sowie Assembler.</p>
<p>Problem:<br />
Wenn ich die Daten lade, bekomme ich anhand einer Typ-ID den Typ der Daten heraus. Nun will es mir aber nicht einfallen, wie daraus die richtige Klasse generieren könnte ohne, dass ich ne hässliche switch-Abfrage starte und jede gültige Typ-ID durchgehe.</p>
<p>Eigener Lösungsansatz:<br />
Ich dachte mir, dass ich Konstruktoren für jede Klasse baue und diese in einem Array abspeichere. Über den Index des Array würde ich dann die richtige Funktion bekommen, darüber ein initialisiertes Objekt der richtigen Klasse und alles wäre schön. Ich bekomme das nur nicht hin.</p>
<p>Feindliche Sabotagetrupps:<br />
Der Compiler meldet mir, dass ich keine Liste vom Typ Funktion erstellen kann. Selbst mit (void*) bin ich gescheitert.</p>
<p>Antrag:<br />
Kann mir jemand bei dem Problem helfen, oder eine andere vielleicht bessere Lösung zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033417</guid><dc:creator><![CDATA[Hellhound66]]></dc:creator><pubDate>Sat, 08 Apr 2006 18:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to richtige Klasse finden on Sat, 08 Apr 2006 18:47:15 GMT]]></title><description><![CDATA[<p>du hast<br />
class Base{...};<br />
und<br />
class Derived{...};<br />
dann geht vielleicht auch<br />
typedef Base* readAndCreateType(istream&amp; in);<br />
und<br />
Base* readDerived(istream&amp; in){<br />
return new Derived(in);<br />
}<br />
und<br />
readAndCreateType* arr[]={&amp;readDerived};<br />
und<br />
Base* b=(*arr[0])(cin);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033424</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 08 Apr 2006 18:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to richtige Klasse finden on Sun, 09 Apr 2006 06:23:50 GMT]]></title><description><![CDATA[<p>*hust*<br />
Krass.</p>
<p>An sowas muss ich mich erstmal gewöhnen. Vor allem, ich muss es erst einmal verstehen. Wenn ich es nicht blicke, melde ich mich nochmal.</p>
<p>Danke für die Hilfe.</p>
<p>/edit:<br />
Was mir aufgefallen ist:<br />
Sorry, ich hatte mich undeutlich ausgedrückt. Als ich Daten der Klasse meinte, meinte ich nicht deren Datenfelder, sondern z.B. die Textur, die sich dahinter verbirgt, oder die Soundfile, als Beispiel.</p>
<p>/edit2:<br />
Wie kann ich es realisieren, dass sich die Module selbständig in z.B. einem solchen Array registrieren, ohne dass ich was am Hauptprogramm was ändern muss?</p>
<p>/edit3: Ich habs jetzt verstanden, allerdings fehlt mir noch der Kick in die richtige Richtung was /edit2 angeht. Da will mir einfach keine Lösung einfallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033455</guid><dc:creator><![CDATA[Hellhound66]]></dc:creator><pubDate>Sun, 09 Apr 2006 06:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to richtige Klasse finden on Sun, 09 Apr 2006 17:12:21 GMT]]></title><description><![CDATA[<p>Hellhound66 schrieb:</p>
<blockquote>
<p>/edit2:<br />
Wie kann ich es realisieren, dass sich die Module selbständig in z.B. einem solchen Array registrieren, ohne dass ich was am Hauptprogramm was ändern muss?</p>
</blockquote>
<p>vielleicht in der Derived.cpp</p>
<pre><code class="language-cpp">Derived::Derived(istream&amp; in)
:Base(in){
   in&gt;&gt;posx;
   in&gt;&gt;posy;
   in&gt;&gt;name;
}
...
Base* readDerived(istream&amp; in){ 
return new Derived(in); 
}
//17 sei die id von Derived
theReadfuntionsSetMeyersSingleton.get()[17]=&amp;readDerived;
</code></pre>
<blockquote>
<p>Sorry, ich hatte mich undeutlich ausgedrückt. Als ich Daten der Klasse meinte, meinte ich nicht deren Datenfelder, sondern z.B. die Textur, die sich dahinter verbirgt, oder die Soundfile, als Beispiel.</p>
</blockquote>
<p>oh. dafür braucht man meinen trick nicht. da geht doch ein schlichtes</p>
<pre><code class="language-cpp">class Galoppahue:public Base{
   char const* getSoundFileName(){
      //virtual in base
      return &quot;data/sound/pferdWiehern.wav&quot;;
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1033983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033983</guid><dc:creator><![CDATA[volkard2]]></dc:creator><pubDate>Sun, 09 Apr 2006 17:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to richtige Klasse finden on Sun, 09 Apr 2006 21:56:37 GMT]]></title><description><![CDATA[<blockquote>
<p>theReadfuntionsSetMeyersSingleton.get()[17]=&amp;readDerived;</p>
</blockquote>
<p>Das verstehe ich nicht. Diese Zeile kann ich nicht außerhalb von main() aufrufen und wenn ich es in eine Funktion packe, muss ich diese wiederum in main() aufrufen. Ich hoffe, ihr versteht was ich meine.</p>
<p>Ich habe eine Includeliste, die so aussieht:</p>
<p>#include &quot;base.h&quot;<br />
#include &quot;CTexture.h&quot;</p>
<p>Nun möchte ich die Klassen erweitern, indem ich einfach nur die neue Klasse einbinde, ohne was in meinem Hauptprogramm ändern zu müssen:</p>
<p>#include &quot;base.h&quot;<br />
#include &quot;CTexture.h&quot;<br />
#include &quot;CMap.h&quot;</p>
<p>In der fiktiven CMap.h soll alles soweit vorbereitet werden, dass aus Files geladene Maps über eine selbstprogrammierte Streamklasse die richtige (CMap) Klasse generieren.</p>
<blockquote>
<p>Zitat:<br />
Sorry, ich hatte mich undeutlich ausgedrückt. Als ich Daten der Klasse meinte, meinte ich nicht deren Datenfelder, sondern z.B. die Textur, die sich dahinter verbirgt, oder die Soundfile, als Beispiel.</p>
<p>oh. dafür braucht man meinen trick nicht. da geht doch ein schlichtes</p>
</blockquote>
<p>Eigentlich wollte ich damit meinen Aussagen mehr Klarheit verleihen, aber das war ein Schuß in den Ofen ^^. Natürlich brauche ich deinen Trick, der ist nämlich genau das was ich suchte. Ich wollte mit meiner Aussage nur ausgrenzen, dass irgendjemand denkt, ich wollte die Klasse selbst (also die Daten, die virtual table, usw.) speichern, sofern das überhaupt irgendwie geht.</p>
<p>P.S. Danke für die Anregung, die Daten an den Konstruktor der Klasse mittels einer Streamklasse zu bewerkstelligen. Das ist ne coole Idee. Sicherlich ein alter Hut, aber wie gesagt, ich lerne dass, was mir die Hilfe zeigt. Und das hatte ich noch nicht gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1034175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1034175</guid><dc:creator><![CDATA[Hellhound66]]></dc:creator><pubDate>Sun, 09 Apr 2006 21:56:37 GMT</pubDate></item></channel></rss>