<?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[boost any]]></title><description><![CDATA[<p>hallo wenn ich es richtig verstanden habe kann any für jeden beliebigen datentyp herhalten</p>
<p>ich möchte nun ein array von beliebigen datentypen erstellen, die aber alle über eine bestimmte funktion beinhalten, diese möchte ich aufrufen OHNE vorher zu wissen um welchen datentyp es sich tatsächlich handelt. Geht das irgendwie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241840/boost-any</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 06:13:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241840.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 May 2009 17:36:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 17:36:06 GMT]]></title><description><![CDATA[<p>hallo wenn ich es richtig verstanden habe kann any für jeden beliebigen datentyp herhalten</p>
<p>ich möchte nun ein array von beliebigen datentypen erstellen, die aber alle über eine bestimmte funktion beinhalten, diese möchte ich aufrufen OHNE vorher zu wissen um welchen datentyp es sich tatsächlich handelt. Geht das irgendwie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716265</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Tue, 26 May 2009 17:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 17:40:13 GMT]]></title><description><![CDATA[<p>shisha schrieb:</p>
<blockquote>
<p>ich möchte nun ein array von beliebigen datentypen erstellen, <strong>die aber alle über eine bestimmte funktion beinhalten</strong></p>
</blockquote>
<p>Kannst du das nochmals formulieren?</p>
<p>Was soll diese Funktion genau tun, wenn sie nicht weiss, um was für einen Datentyp es sich handelt? Kann es sein, dass du versuchst, eine Lösung für ein Problem zu finden und dabei auf einen einzelnen Ansatz fixiert bist? In diesem Falle solltest du uns eher mitteilen, <strong>was</strong> du erreichen möchtest, und nicht <strong>wie</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716268</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 17:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 18:18:39 GMT]]></title><description><![CDATA[<p>in einem spiel möchte ich alle objekte egal welcher art in einem vector speichern, alle sollen die funktion getObjectID besitzen, ich möchte allerdings aus bequemlichkeit keine virtuelle klasse einführen von der sich die anderen ableiten, sondern sie alle so reinpacken und selbst dafür sorgen dass die funktion vorhanden ist</p>
<p>die basisklasse müsste ich ja um slicing zu vermeiden als pointer im vector verwenden std::vector&lt;Basisklasse*&gt;<br />
und das gefällt mir nicht so gut, auch wenn der aufruf push_back(new ABgeleitet) sehr schön funktionieren würde, naja ich bin noch am probieren wie sähe denn eine professionelle lösung aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716302</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Tue, 26 May 2009 18:18:39 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 18:53:32 GMT]]></title><description><![CDATA[<p>shisha schrieb:</p>
<blockquote>
<p>in einem spiel möchte ich alle objekte egal welcher art in einem vector speichern, alle sollen die funktion getObjectID besitzen, ich möchte allerdings aus bequemlichkeit keine virtuelle klasse einführen von der sich die anderen ableiten, sondern sie alle so reinpacken und selbst dafür sorgen dass die funktion vorhanden ist</p>
</blockquote>
<p>Das ist ein ziemlich schlechtes Design (wie so oft, wenn der Beweggrund Bequemlichkeit ist). Hast du mal darüber nachgedacht, dass die ganze Logik, die Fälle unterscheiden müsste, auch geschrieben werden muss und in eine regelrechte Frickelei ausarten kann? Und dass die langfristige Wartbarkeit und Übersichtlichkeit enorm darunter leiden könnte?</p>
<p>shisha schrieb:</p>
<blockquote>
<p>und das gefällt mir nicht so gut, auch wenn der aufruf push_back(new ABgeleitet) sehr schön funktionieren würde, naja ich bin noch am probieren wie sähe denn eine professionelle lösung aus?</p>
</blockquote>
<p>Ich finde bereits &quot;alle Objekte egal welcher Art im gleichen Container&quot; bedenklich. Auch wenn du das mit Polymorphie machst, hast du im Grunde genommen die gleichen Probleme. Du solltest dir ernsthaft überlegen, was dagegen spricht, nur Objekte zusammen zu speichern, die auch etwas gemeinsam haben. Dadurch kannst du diese nämlich leichter und effizienter ansprechen. Zudem schaffst du eine logische Gliederung. Und glaub mir, du wirst später froh sein, wenn dein Design nicht auf Faulheit und Bequemlichkeit basiert. Besonders, wenn das Projekt einmal grösser werden sollte.</p>
<p>Für Objekte, die wirklich etwas gemeinsam haben, gibt es natürlich schon Methoden. Zeiger in STL-Containern sind in der Tat eine potenzielle Fehlerquelle, da man schnell einmal die Freigabe vergisst. Und Container, die einem die Speicherverwaltung nur teilweise abnehmen, sind auch nicht ganz das Wahre. Ein guter Ansatz für Polymorphie wären zum Beispiel Boosts Pointer-Container wie <code>ptr_vector</code> . Da werden Zeiger gespeichert, was Polymorphie erlaubt, und auch automatisch wieder freigegeben. Alternativ könntest du den <code>shared_ptr</code> -Smart-Pointer in STL-Containern einsetzen.</p>
<p>Aber nochmals: Denk dran, Polymorphie <em>sinnvoll</em> einzusetzen (d.h. wenn tatsächlich eine Gemeinsamkeit besteht, die du auch ausnutzen kannst, also über virtuelle Funktionen). Der kleine Mehraufwand wird sich auf jeden Fall auszahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716335</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 18:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:09:50 GMT]]></title><description><![CDATA[<p>ich mache mir starke gedanken grad über den aufbau, also es sollte vlt mal ein jump n run werden, falls ich je fertig werde...</p>
<p>da hab ich die Monster, die Spielfigur, bewegliche Elemente, die Map mit soliden und nicht soliden Stücken</p>
<p>wie könnte ich das sinnvoll aufteilen?</p>
<p>einerseits möchte ich in jeder spielschleife eine art gravitation und kollisionserkennung wirken lassen, hierfür wäre es gut wenn alle objekte in einem container wären<br />
andererseits, falls ich mal ne kleine KI machen will wäre es gut nur die Monster anzusprechen, ich habe starke probleme damit jetzt gut zu abstrahieren</p>
<p>ich denke schon darüber nach die daten in mehreren containern mehrfach zu specihern, aber das kann doch auch nicht das wahre sein.</p>
<p>Am quelltext von supertux scheitere ich im moment der ist schon viel zu fortgeschritten und vor allem zu viel um ihn auf einmal zu überblicken, ausserdem möchte ich sichergehn dass ich auch ein wenig denke , aber an dem problem komme ich nicht weiter grad</p>
<p>wäre dankbar für jeden tipp <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="🙂"
    /> [auch wenn das jetzt nicht viel mit c++ an sich zu tun hat]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716342</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Tue, 26 May 2009 19:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:21:48 GMT]]></title><description><![CDATA[<p>shisha schrieb:</p>
<blockquote>
<p>ich mache mir starke gedanken grad über den aufbau, also es sollte vlt mal ein jump n run werden, falls ich je fertig werde...</p>
<p>da hab ich die Monster, die Spielfigur, bewegliche Elemente, die Map mit soliden und nicht soliden Stücken</p>
<p>wie könnte ich das sinnvoll aufteilen?</p>
</blockquote>
<p>So schön Pre-Design auch ist, eine iterative Herangehensweise würde dir IMHO um Längen leichter fallen. Sprich: Einfach anfangen, ohne zu planen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716348</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 26 May 2009 19:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:29:31 GMT]]></title><description><![CDATA[<p>shisha schrieb:</p>
<blockquote>
<p>ich mache mir starke gedanken grad über den aufbau, also es sollte vlt mal ein jump n run werden, falls ich je fertig werde...</p>
</blockquote>
<p>Unterschätze ein Jump'n'Run nicht. Ich bin selber seit einiger Zeit an einem, und das gibt nicht gerade wenig zu tun. <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="😉"
    /><br />
Es kommt natürlich drauf an, wie viel du daran machen willst. Aber umso mehr solltest du dein Design von Anfang an gut planen, zumal es plötzlich sein kann, dass du das Spiel erweitern willst. Und es ist sehr motivationsraubend, wenn der ganze bisherige Code ein einziges Chaos ist und man versuchen muss, ein neues Feature einzubauen. Dann ist man nämlich gezwungen, den neuen Code darauf aufzubauen und verfrickelt sich so immer weiter. Ich habe selber nach einiger Zeit feststellen müssen, dass gewisse Dinge nicht durchdacht waren - und eine aufwändige Änderung durchgeführt. Aber ich bin froh, diese gemacht zu haben, ohne diese wäre das Entwickeln im Moment wohl viel mühsamer.</p>
<p>shisha schrieb:</p>
<blockquote>
<p>da hab ich die Monster, die Spielfigur, bewegliche Elemente, die Map mit soliden und nicht soliden Stücken</p>
</blockquote>
<p>Bei mir sieht es ziemlich ähnlich aus. Ich habe eine Klasse, die diese Spielelemente alle speichert. Da gibt eine Instanz des Spielers, einen Container mit allen Gegnern, einen verschachtelten, tabellen-ähnlichen Container der Tilemap (analog zu deinen soliden/nicht soliden Stücken), einen Container mit allen abgefeuerten Projektilen, einen mit Liften, und so weiter. Alle separat.</p>
<p>Die Objekte habe ich dabei so aufgeteilt, dass ich eine abstrakte Basisklasse für alle beweglichen Objekte habe. Davon erbt eine Klasse für die kollidierbaren Objekte. Davon erben wiederum Klassen für die Spielfigur, Gegner und Projektile. Du musst dir überlegen, wo es sinnvoll ist, Gemeinsamkeiten anzusetzen, und wo Abstraktion notwendig ist. Dabei gibt es nicht eine einzige Lösung, vieles wird sich mit der Zeit und zunehmender Erfahrung zeigen.</p>
<p>shisha schrieb:</p>
<blockquote>
<p>einerseits möchte ich in jeder spielschleife eine art gravitation und kollisionserkennung wirken lassen, hierfür wäre es gut wenn alle objekte in einem container wären</p>
</blockquote>
<p>Nein, das ist nicht nötig. Du definierst eben Funktionen, die mit allen kollidierbaren Objekten arbeiten können. Damit können sie aufgrund der Vererbung automatisch auch mit Gegnern und Projektilen arbeiten. Was du halt machen musst, sind mehrere Schleifen, um jeden Container durchzugehen. Aber das sollte kein Problem darstellen und ist die Spezialisierung allemal wert.</p>
<p>shisha schrieb:</p>
<blockquote>
<p>andererseits, falls ich mal ne kleine KI machen will wäre es gut nur die Monster anzusprechen, ich habe starke probleme damit jetzt gut zu abstrahieren</p>
</blockquote>
<p>Eben, für solche Fälle ist es von Vorteil, du definierst zum Beispiel Gegner-spezifische Algorithmen. Dann gehst du alle Gegner im Gegner-Container durch und wendest diese an - ohne Fallunterscheidung, da in diesem Container zwangsläufig nur Gegner sind.</p>
<p>shisha schrieb:</p>
<blockquote>
<p>ich denke schon darüber nach die daten in mehreren containern mehrfach zu specihern, aber das kann doch auch nicht das wahre sein.</p>
</blockquote>
<p>Wieso nicht? Was ist denn für dich nicht &quot;das Wahre&quot; daran? Wäre &quot;das Wahre&quot; wirklich ein einziger Massencontainer mit allem Möglichen drin? Hier kommt nämlich auch ein weiterer Aspekt hinzu: Die Performance. Nicht nur die dadurch notwendigen Fallunterscheidungen, sondern auch die Operationen im Container sind viel verheerender, da sich darin viel mehr Elemente befinden.</p>
<p>shisha schrieb:</p>
<blockquote>
<p>wäre dankbar für jeden tipp <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="🙂"
    /> [auch wenn das jetzt nicht viel mit c++ an sich zu tun hat]</p>
</blockquote>
<p>So, ich habe dir nun ein paar Tipps gegeben. Wenn du welche davon nicht verstehst oder weitere Fragen hast, stell sie einfach. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1716353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716353</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 19:29:31 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:44:01 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>So schön Pre-Design auch ist, eine iterative Herangehensweise würde dir IMHO um Längen leichter fallen. Sprich: Einfach anfangen, ohne zu planen.</p>
</blockquote>
<p>Davon rate ich <strong>sehr stark</strong> ab.</p>
<p>Genau dieses &quot;Leichter Fallen&quot; ist das Problem, weil sich dahinter eine kurzfristige Sichtweise verbirgt. Ja, am Anfang ist es natürlich leichter. Umso mehr wachsen die Probleme mit zunehmendem Fortschritt, wenn keine stabile Basis vorhanden ist.</p>
<p>Ein geplantes Durchdesignen nimmt zwar etwas Zeit in Anspruch, jedoch holt man diese sehr schnell wieder ein. Entweder, weil man nachträglich wieder was umdesignen muss, oder - was viel schlimmer ist - wegen des Mehraufwands und der fehlenden Coderansparenz, die aufgrund einer schlechten Voraussetzung entstehen. Und wie gesagt, sind Momente alles andere als lustig, in denen einem bewusst wird, dass der gesamte bisherige Code (unter Umständen die Arbeit langer Zeit) einfach nur Schrott ist, und man jetzt die Wahl zwischen Neuanfang und dem Versuch hat, darauf basierend etwas halbwegs Vernünftiges zu Stande zu bringen.</p>
<p>Klar sollte man nicht monatelang am Design feilen, bevor man zum praktischen Teil kommt. Aber ein wenig überlegen schadet nie. Sehr viele Aspekte kristallisieren sich während des Programmierens heraus: Man sieht plötzlich, dass XY eine gute Herangehensweise an ein Problem ist und dass YZ durch jenen Ansatz viel effizienter gelöst werden könnte. Ohne praktische Erfahrung ist es auch relativ schwierig, abzuschätzen, worin gutes Design besteht. Trotzdem kann man sich einiges ersparen, wenn man ein wenig plant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 19:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:51:25 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Trotzdem kann man sich einiges ersparen, wenn man ein wenig plant.</p>
</blockquote>
<p>Das sicherlich, ich bin ein großer Fan der Planung. Nur denke ich, dass man ein bestimmtes &quot;Level&quot; erreicht haben muss, bevor man eine komplette Anwendung durchplanen kann. Und bei der Fragestellung gehe ich von diesem &quot;Level&quot; nicht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1716377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716377</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 26 May 2009 19:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to boost any on Tue, 26 May 2009 19:59:42 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Nur denke ich, dass man ein bestimmtes &quot;Level&quot; erreicht haben muss, bevor man eine komplette Anwendung durchplanen kann. Und bei der Fragestellung gehe ich von diesem &quot;Level&quot; nicht aus.</p>
</blockquote>
<p>Da hast du natürlich Recht, das meinte ich auch mit meinem zweitletzten Satz vorhin. Naja, ein wenig kann man dennoch planen. Oder sich wie hier Tipps geben lassen, das ist zumindest schon besser, als voll ins Messer zu laufen und danach komplett frustriert zu sein. <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="😉"
    /><br />
(Auch wenn es so oder so zu Fehlschlägen kommt, aus denen man aber einiges lernt.)</p>
<p>Und man muss auch nicht die ganze Anwendung vollständig durchplanen, das ist sowieso kaum möglich. Es reicht, wenn man eine ungefähre Ahnung davon hat, wie man die ganz zentralen Dinge strukturiert. Es ist zumindest schon ein grosser Schritt, von einem <code>boost::any</code> -Massencontainer wegzukommen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1716384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1716384</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 26 May 2009 19:59:42 GMT</pubDate></item></channel></rss>