<?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[Resource Manager]]></title><description><![CDATA[<p>Hallo,</p>
<p>bisher habe ich bei Resource Managern immer einen relativ einfachen Ansatz genommen. Ich hatte natürlich eine Klasse für die Resourcen selbst:</p>
<pre><code class="language-cpp">template&lt;class ResourceType&gt;
class Resource
{
  public:
    Resource(ResourceType *resource,std::string filename)
    {
      m_resource=resource;
      m_resource_filename=filename;
    }
    ~Resource() { delete m_resource; }
   private:
     ResourceType *m_resource;
     std::string m_resource_filename;
}
</code></pre>
<p>Die Klasse variierte je nach Projekt immer ein bisschen, um Suchvorgänge nach Resourcen zu erleichtern (in diesem Falle benutze ich hierfür einfach strings)</p>
<p>Meine Resourcenmanager waren dann im Prinzip immer so aufgebaut, dass ich für jede mögliche Resource im Projekt (welche sich ja ab und zu unterscheiden) eigene Methoden in eine entsprechende Klasse dafür gepackt habe.</p>
<p>Als Beispiel:<br />
In meinem Projekt kommen als mögliche Resourcen Objekte der Klassen &quot;Sprite&quot; und &quot;Sound&quot; vor. Dementsprechend passte ich die Resourcen-Managerklasse an (welche ich im Allgemeinen als Singleton verwendet habe, um die Resourcen global verfügbar zu haben)</p>
<pre><code class="language-cpp">class ResourceManager : public Singleton&lt;ResourceManager&gt;
{
   public:
     ResourceManager();
     ~ResourceManager();

     void add_sprite(Sprite sprite);
     Sprite *get_sprite(std::string sprite_filename); 

    //und das gleiche nochmal für sound
    //..

    private:
      std::vector&lt;Resource&lt;Sprite&gt; *&gt; m_sprites;
}
</code></pre>
<p>Dadurch passiert es natürlich, dass mit neuen Ideen die man umsetzen will die Klasse immer wieder angepasst wird um Balast abzuwerfen (unnötige methoden und container für nichtvorkommende resourcen) und neues hinzuzufügen.</p>
<p>Gibt es da allgemeinere Ansätze um die nötigen Anpassungen zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190616/resource-manager</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 17:01:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190616.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Aug 2007 14:08:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Resource Manager on Fri, 24 Aug 2007 14:09:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bisher habe ich bei Resource Managern immer einen relativ einfachen Ansatz genommen. Ich hatte natürlich eine Klasse für die Resourcen selbst:</p>
<pre><code class="language-cpp">template&lt;class ResourceType&gt;
class Resource
{
  public:
    Resource(ResourceType *resource,std::string filename)
    {
      m_resource=resource;
      m_resource_filename=filename;
    }
    ~Resource() { delete m_resource; }
   private:
     ResourceType *m_resource;
     std::string m_resource_filename;
}
</code></pre>
<p>Die Klasse variierte je nach Projekt immer ein bisschen, um Suchvorgänge nach Resourcen zu erleichtern (in diesem Falle benutze ich hierfür einfach strings)</p>
<p>Meine Resourcenmanager waren dann im Prinzip immer so aufgebaut, dass ich für jede mögliche Resource im Projekt (welche sich ja ab und zu unterscheiden) eigene Methoden in eine entsprechende Klasse dafür gepackt habe.</p>
<p>Als Beispiel:<br />
In meinem Projekt kommen als mögliche Resourcen Objekte der Klassen &quot;Sprite&quot; und &quot;Sound&quot; vor. Dementsprechend passte ich die Resourcen-Managerklasse an (welche ich im Allgemeinen als Singleton verwendet habe, um die Resourcen global verfügbar zu haben)</p>
<pre><code class="language-cpp">class ResourceManager : public Singleton&lt;ResourceManager&gt;
{
   public:
     ResourceManager();
     ~ResourceManager();

     void add_sprite(Sprite sprite);
     Sprite *get_sprite(std::string sprite_filename); 

    //und das gleiche nochmal für sound
    //..

    private:
      std::vector&lt;Resource&lt;Sprite&gt; *&gt; m_sprites;
}
</code></pre>
<p>Dadurch passiert es natürlich, dass mit neuen Ideen die man umsetzen will die Klasse immer wieder angepasst wird um Balast abzuwerfen (unnötige methoden und container für nichtvorkommende resourcen) und neues hinzuzufügen.</p>
<p>Gibt es da allgemeinere Ansätze um die nötigen Anpassungen zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351228</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 24 Aug 2007 14:09:36 GMT</pubDate></item><item><title><![CDATA[Reply to Resource Manager on Fri, 24 Aug 2007 14:57:11 GMT]]></title><description><![CDATA[<p>ja, dafuer gibt es das factory pattern, polymorphy, sodass du nur einen generischen resourcepointer zurueckliefern musst, templates damit du trotzdem den gewuenschten typen bekommst, autoptr die resourcen von selbst anlegen, verwalten, refcounten etc.<br />
aber die jungs vom c++ koennen dir sicherlich mehr zu diesen c++ grundlagen sagen oder vielleicht bessere loesungen empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351263</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Fri, 24 Aug 2007 14:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to Resource Manager on Fri, 24 Aug 2007 14:57:19 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-5577.html" rel="nofollow">rapso</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-7.html" rel="nofollow">Spiele-/Grafikprogrammierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351264</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 24 Aug 2007 14:57:19 GMT</pubDate></item></channel></rss>