<?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[Möglichkeiten statische Elemente einer Klasse zu initialisieren]]></title><description><![CDATA[<p>Hello again,</p>
<p>wenn ich statische Elemente in meiner Klasse habe kann ich diese ja über statische Methoden initialisieren. Gibt es noch andere Möglichkeiten diese zu initialisieren? Bei der Definition geht das ja nicht da das Element ja dazu konstant sein müsste, so habe ich das jedenfalls verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272465/möglichkeiten-statische-elemente-einer-klasse-zu-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 21:14:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272465.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Aug 2010 08:54:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 08:54:50 GMT]]></title><description><![CDATA[<p>Hello again,</p>
<p>wenn ich statische Elemente in meiner Klasse habe kann ich diese ja über statische Methoden initialisieren. Gibt es noch andere Möglichkeiten diese zu initialisieren? Bei der Definition geht das ja nicht da das Element ja dazu konstant sein müsste, so habe ich das jedenfalls verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941340</guid><dc:creator><![CDATA[cppfrager]]></dc:creator><pubDate>Wed, 18 Aug 2010 08:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 09:29:31 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941353</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 18 Aug 2010 09:29:31 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 09:17:51 GMT]]></title><description><![CDATA[<p>Du musst sie ja außerhalb der Klasse ohnehin definieren, dort kannst Du sie ja dann wie eine normale globale Variable initialisieren:</p>
<pre><code class="language-cpp">// Header
class x {
    static bool b;
};

// Sourcefile
bool x::b = true;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1941356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941356</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Wed, 18 Aug 2010 09:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 12:00:03 GMT]]></title><description><![CDATA[<blockquote>
<p>Gibt es noch andere Möglichkeiten diese zu initialisieren</p>
</blockquote>
<p>initialisierungsliste?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941498</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Wed, 18 Aug 2010 12:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 12:04:10 GMT]]></title><description><![CDATA[<p>antialias schrieb:</p>
<blockquote>
<p>initialisierungsliste?</p>
</blockquote>
<p>Es ging doch um statische Member...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941505</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 18 Aug 2010 12:04:10 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Wed, 18 Aug 2010 12:04:59 GMT]]></title><description><![CDATA[<p>antialias schrieb:</p>
<blockquote>
<blockquote>
<p>Gibt es noch andere Möglichkeiten diese zu initialisieren</p>
</blockquote>
<p>initialisierungsliste?</p>
</blockquote>
<p>Geht bei static nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941507</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 18 Aug 2010 12:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 00:34:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24532">@cppfrager</a>:<br />
Wenn zur Initialisierung keine (Laufzeit-)Berechnung nötig ist, also wenn es sich nur um konstante Werte handelt, dann funktioniert das so wie es schon Mr X gezeigt hat. Und zwar völlig problemlos.</p>
<p>Wenn Berechnungen nötig sind, dann kann man sich mittels Funktionen wie <code>boost::call_once</code> die Funktionalität eines statischen Konstruktor nachbauen.<br />
Dazu muss man dann überall wo man auf eine solche statische Variable zugreift den &quot;statischen Konstruktor&quot; über <code>call_once</code> aufrufen. Inetwa so:</p>
<pre><code class="language-cpp">// .h

class foo
{
public:
    void f();
    int f2();
    // ...

private:
    static void static_ctor();
    static void static_ctor_impl();
    static int s_static_int;
};

// .cpp

namespace
{
boost::once_flag s_foo_static_ctor_once_flag = BOOST_ONCE_INIT;
}

void foo::static_ctor()
{
    boost::call_once(&amp;foo::static_ctor_impl, s_foo_static_ctor_once_flag);
}

void foo::static_ctor_impl()
{
    s_static_int = SomeCalculation();
}

void foo::f()
{
    static_ctor();
    s_static_int++;
}

int foo::f2()
{
    static_ctor();
    return s_static_int;
}

// ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1941805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941805</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 19 Aug 2010 00:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 02:52:52 GMT]]></title><description><![CDATA[<p>Man könnte es ja auch etwas simpler gestalten und boost weglassen (was ich hier sowieso für Schwachsinnig halte):</p>
<pre><code class="language-cpp">static abc_init_static = false;

class abc{
    private:
        static int var;
        static void init_static();

    public:
        abc(){
            if(!abc_init_static)
                init_static();
        }

        f1(){
            var++;
        }

        f2(){
            var++;
        }

        ctor(){
            abc_init_static = true;

            var = 0;
        }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1941814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941814</guid><dc:creator><![CDATA[Fallen Angel]]></dc:creator><pubDate>Thu, 19 Aug 2010 02:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 07:23:44 GMT]]></title><description><![CDATA[<p>Sehr nette Ideen hier.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/33218">@FallenAngel</a>: Ich habe dein Beispiel leider nicht zum laufen bekommen. Soll ctor eigentlich init_static sein? Wenn ich das so mache und die fehlenden Schlüsselwörter hinzufüge klappt es leider auch nicht. Kann es sein das es nur geht wenn eine externe Funktion das statische Datenelement definiert, und das Boost versteckt genau sowas macht?</p>
<p>Sorry für die vielen Fragen ich bin absoluter C++ Anfänger wie man sieht <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/1941842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941842</guid><dc:creator><![CDATA[cppfrager]]></dc:creator><pubDate>Thu, 19 Aug 2010 07:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 07:30:37 GMT]]></title><description><![CDATA[<p>Fallen Angel schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>Das ist, im Gegensatz zum Beispiel von hustbaer, aber nicht Threadsicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1941848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1941848</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Aug 2010 07:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 13:13:31 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Fallen Angel schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>Das ist, im Gegensatz zum Beispiel von hustbaer, aber nicht Threadsicher.</p>
</blockquote>
<p>Davon hat hier auch niemand gerendet. Wir sind doch im C++ Forum?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24532">@cppfrager</a></p>
<p>Ja, ctor soll init_static darstellen. Hab mich da gestern anscheinend verschrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942007</guid><dc:creator><![CDATA[Fallen Angel]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Möglichkeiten statische Elemente einer Klasse zu initialisieren on Thu, 19 Aug 2010 13:45:45 GMT]]></title><description><![CDATA[<p>Fallen Angel schrieb:</p>
<blockquote>
<p>Davon hat hier auch niemand gerendet. Wir sind doch im C++ Forum?</p>
</blockquote>
<p>Ja, und? Der nächste Standard steht in den Startlöchern, womit Threading sehr wohl ein Thema ist. Weiterhin ist die Boost-Lösung deutlich weniger frickelig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942031</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:45:45 GMT</pubDate></item></channel></rss>