<?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[Ressourcenzuweisung zur Compilezeit]]></title><description><![CDATA[<p>Hallo Allerseits,</p>
<p>ich habe folgendes Problem:</p>
<p>Mehrere Klassen teilen sich Ressourcen, welche nur von einer Klasse benutzt werden können. Daher darf nur eine der Klassen instantiiert werden. Das zur Laufzeit zu erreichen ist recht einfach.<br />
Beispiel (nur, um das Prinzip zu zeigen...):</p>
<pre><code class="language-cpp">#include &lt;assert.h&gt;

class Ressource
{
public:
    enum res
    {
        RES1,
        RES2
    };
private:
    bool ressources[RES2];
    Ressource() {};
public:
    static Ressource &amp;Inst(void)
    {
        static Ressource theRessource;
        return theRessource;
    };
    bool isAlloc(res r) { return ressources[r]; };
    void allocate(res r) { ressources[r] = true; };
};
template&lt;Ressource::res r&gt;
class a
{
public:
    a() { assert (!Ressource::Inst().isAlloc(r)); Ressource::Inst().allocate(r); };
};
template&lt;Ressource::res r&gt;
class b
{
public:
    b() { assert (!Ressource::Inst().isAlloc(r)); Ressource::Inst().allocate(r); };
};
int main() {
    a&lt;Ressource::RES1&gt; mya;
    b&lt;Ressource::RES1&gt; myb;
	return 0;
}
</code></pre>
<p>führt zur Laufzeitmeldung:<br />
test.cpp:33: b&lt;r&gt;::b() [with ressource r = (ressource)0u]: Assertion `!ressourcen[r]' failed.</p>
<p>Dies würde ich gerne zur Compilezeit sicher stellen, also eine Fehlermeldung des Compilers erreichen.</p>
<p>Leider finde ich keine Lösung, weiß auch nicht, ob das überhaupt möglich ist.</p>
<p>Für jeden Hinweis bin ich dankbar.</p>
<p>Gruß</p>
<p>Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280778/ressourcenzuweisung-zur-compilezeit</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 00:21:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280778.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jan 2011 10:04:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ressourcenzuweisung zur Compilezeit on Fri, 21 Jan 2011 10:04:20 GMT]]></title><description><![CDATA[<p>Hallo Allerseits,</p>
<p>ich habe folgendes Problem:</p>
<p>Mehrere Klassen teilen sich Ressourcen, welche nur von einer Klasse benutzt werden können. Daher darf nur eine der Klassen instantiiert werden. Das zur Laufzeit zu erreichen ist recht einfach.<br />
Beispiel (nur, um das Prinzip zu zeigen...):</p>
<pre><code class="language-cpp">#include &lt;assert.h&gt;

class Ressource
{
public:
    enum res
    {
        RES1,
        RES2
    };
private:
    bool ressources[RES2];
    Ressource() {};
public:
    static Ressource &amp;Inst(void)
    {
        static Ressource theRessource;
        return theRessource;
    };
    bool isAlloc(res r) { return ressources[r]; };
    void allocate(res r) { ressources[r] = true; };
};
template&lt;Ressource::res r&gt;
class a
{
public:
    a() { assert (!Ressource::Inst().isAlloc(r)); Ressource::Inst().allocate(r); };
};
template&lt;Ressource::res r&gt;
class b
{
public:
    b() { assert (!Ressource::Inst().isAlloc(r)); Ressource::Inst().allocate(r); };
};
int main() {
    a&lt;Ressource::RES1&gt; mya;
    b&lt;Ressource::RES1&gt; myb;
	return 0;
}
</code></pre>
<p>führt zur Laufzeitmeldung:<br />
test.cpp:33: b&lt;r&gt;::b() [with ressource r = (ressource)0u]: Assertion `!ressourcen[r]' failed.</p>
<p>Dies würde ich gerne zur Compilezeit sicher stellen, also eine Fehlermeldung des Compilers erreichen.</p>
<p>Leider finde ich keine Lösung, weiß auch nicht, ob das überhaupt möglich ist.</p>
<p>Für jeden Hinweis bin ich dankbar.</p>
<p>Gruß</p>
<p>Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009641</guid><dc:creator><![CDATA[StephanH]]></dc:creator><pubDate>Fri, 21 Jan 2011 10:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcenzuweisung zur Compilezeit on Fri, 21 Jan 2011 10:31:31 GMT]]></title><description><![CDATA[<p>StephanH schrieb:</p>
<blockquote>
<p>Dies würde ich gerne zur Compilezeit sicher stellen, also eine Fehlermeldung des Compilers erreichen.</p>
<p>Leider finde ich keine Lösung, weiß auch nicht, ob das überhaupt möglich ist.</p>
</blockquote>
<p>Nein ist nicht möglich. Stell dir folgendes vor:</p>
<pre><code class="language-cpp">a&lt;Ressource::RES1&gt; mya;
if(rand()%2)
  b&lt;Ressource::RES1&gt; myb;
</code></pre>
<p>uU ist das monostate design pattern aber eine aktzeptable lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009658</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 21 Jan 2011 10:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcenzuweisung zur Compilezeit on Sat, 22 Jan 2011 10:30:21 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Stell dir folgendes vor:</p>
</blockquote>
<p>Peinlich, darauf hätte ich auch selber kommen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Danke</p>
<p>Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010072</guid><dc:creator><![CDATA[StephanH]]></dc:creator><pubDate>Sat, 22 Jan 2011 10:30:21 GMT</pubDate></item></channel></rss>