<?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[bool ändert sich komischerweise bei Loki::StaticDispatcher]]></title><description><![CDATA[<p>Ich verstehe einfache nicht, warum sich der bool wieder ändert, obwohl ich ihn nirgends auf false setzte:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;loki/MultiMethods.h&gt;

struct Base
{
    virtual ~Base() {}
};

struct Widget : public Base
{
    Widget(int x = 0) : x_(x) {}
    int x_;
};

class HatchingExecutor
{
public:
    void Fire(Widget&amp; lhs, Widget&amp; rhs)
    {
        if(lhs.x_ == rhs.x_)
        {
            bool_ = true;
        }
        std::cout &lt;&lt; &quot;Bool: &quot; &lt;&lt; bool_ &lt;&lt; &quot; Adresse: &quot; &lt;&lt; &amp;bool_ &lt;&lt; std::endl;
    }
    void OnError(Base&amp;, Base&amp;) {}
    HatchingExecutor() : bool_(false) { std::cout &lt;&lt; &quot;Konstruktor&quot; &lt;&lt; std::endl; }
private:
    bool bool_;
};

int main()
{
    HatchingExecutor exec;
    typedef Loki::StaticDispatcher&lt;HatchingExecutor, Base, LOKI_TYPELIST_1(Widget)&gt; Dispatch;

    Widget a;
    Widget b(1);
    Widget c;

    Dispatch::Go(a, c, exec);
    Dispatch::Go(a, b, exec);
    Dispatch::Go(c, b, exec);
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Konstruktor
Bool: 1 Adresse: 0xbfae3368
Bool: 0 Adresse: 0xbfae3368
Bool: 0 Adresse: 0xbfae3368
</code></pre>
<p>Erwartet habe ich, dass der bool immer bei 1 bleibt, da ich ihn beim ersten Dispatch::Go ja auf true setzte. Wo wird er wieder auf false gesetzt??!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155380/bool-ändert-sich-komischerweise-bei-loki-staticdispatcher</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 12:04:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155380.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Aug 2006 13:09:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 13:09:47 GMT]]></title><description><![CDATA[<p>Ich verstehe einfache nicht, warum sich der bool wieder ändert, obwohl ich ihn nirgends auf false setzte:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;loki/MultiMethods.h&gt;

struct Base
{
    virtual ~Base() {}
};

struct Widget : public Base
{
    Widget(int x = 0) : x_(x) {}
    int x_;
};

class HatchingExecutor
{
public:
    void Fire(Widget&amp; lhs, Widget&amp; rhs)
    {
        if(lhs.x_ == rhs.x_)
        {
            bool_ = true;
        }
        std::cout &lt;&lt; &quot;Bool: &quot; &lt;&lt; bool_ &lt;&lt; &quot; Adresse: &quot; &lt;&lt; &amp;bool_ &lt;&lt; std::endl;
    }
    void OnError(Base&amp;, Base&amp;) {}
    HatchingExecutor() : bool_(false) { std::cout &lt;&lt; &quot;Konstruktor&quot; &lt;&lt; std::endl; }
private:
    bool bool_;
};

int main()
{
    HatchingExecutor exec;
    typedef Loki::StaticDispatcher&lt;HatchingExecutor, Base, LOKI_TYPELIST_1(Widget)&gt; Dispatch;

    Widget a;
    Widget b(1);
    Widget c;

    Dispatch::Go(a, c, exec);
    Dispatch::Go(a, b, exec);
    Dispatch::Go(c, b, exec);
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Konstruktor
Bool: 1 Adresse: 0xbfae3368
Bool: 0 Adresse: 0xbfae3368
Bool: 0 Adresse: 0xbfae3368
</code></pre>
<p>Erwartet habe ich, dass der bool immer bei 1 bleibt, da ich ihn beim ersten Dispatch::Go ja auf true setzte. Wo wird er wieder auf false gesetzt??!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111051</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:09:47 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 13:37:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Kann es sein, dass du in dieser Zeile eine Variable erstellst, die auf false ist und mit der du dann weiterarbeitest?</p>
<p>HatchingExecutor() : bool_(false) { std::cout &lt;&lt; &quot;Konstruktor&quot; &lt;&lt; std::endl; }</p>
<p>Kann mich aber auch irren.</p>
<p>MFG winexec*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111073</guid><dc:creator><![CDATA[winexec*]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 13:40:13 GMT]]></title><description><![CDATA[<p>winexec* schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Kann es sein, dass du in dieser Zeile eine Variable erstellst, die auf false ist und mit der du dann weiterarbeitest?</p>
<p>HatchingExecutor() : bool_(false) { std::cout &lt;&lt; &quot;Konstruktor&quot; &lt;&lt; std::endl; }</p>
</blockquote>
<p>Das hab ich mir auch schon gedachte, aber der Konstruktor wird ja nur einmal aufgerufen und hier setze ich sie auf true:</p>
<pre><code class="language-cpp">if(lhs.x_ == rhs.x_)
        {
            bool_ = true;
        }
        std::cout &lt;&lt; &quot;Bool: &quot; &lt;&lt; bool_ &lt;&lt; &quot; Adresse: &quot; &lt;&lt; &amp;bool_ &lt;&lt; std::endl;
</code></pre>
<p>Sonst gibt es einfach keinen Punkt wo ich sie auf false setze. Es ist zum heulen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111074</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 13:52:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Guck noch einmal, ob das wirklich durchlaufen wird. Aber ansonsten wüsste ich nicht vom vorgegebenen Code her, wo der Fehler liegt.</p>
<p>MFG winexec*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111087</guid><dc:creator><![CDATA[winexec*]]></dc:creator><pubDate>Sat, 05 Aug 2006 13:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:37:52 GMT]]></title><description><![CDATA[<p>winexec* schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Guck noch einmal, ob das wirklich durchlaufen wird.</p>
</blockquote>
<p>Sonst würde er ja nicht Bool: 1 ausgeben, oder?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111113</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:41:07 GMT]]></title><description><![CDATA[<p>vielleicht liegt es ja daran, dass bei</p>
<pre><code class="language-cpp">Dispatch::Go(a, c, exec);
</code></pre>
<p>eine kopie von exec übergeben wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111117</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:41:07 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:54:10 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>vielleicht liegt es ja daran, dass bei</p>
<pre><code class="language-cpp">Dispatch::Go(a, c, exec);
</code></pre>
<p>eine kopie von exec übergeben wird...</p>
</blockquote>
<p>Aber dann würde doch &quot;Konstruktor&quot; nochmal ausgegeben?</p>
<p>edit: Scheiße, da wird ja dann der Kopierkonstruktor aufgerufen, mein Fehler. Okay daran liegt's, wie lässt sich das umgehen, die Go Funktion ist ja nicht meine...</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111121</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:53:45 GMT]]></title><description><![CDATA[<p>nicht wenn der copy-ctor ausgeführt wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111122</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:53:45 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:54:37 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>nicht wenn der copy-ctor ausgeführt wird</p>
</blockquote>
<p>ist mir auch gerade eingefallen (siehe edit)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111123</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 14:59:15 GMT]]></title><description><![CDATA[<p>keine ahnung, kenn mich mit loki nicht aus. kannst ja mal</p>
<pre><code class="language-cpp">typedef Loki::StaticDispatcher&lt;HatchingExecutor&amp;, Base, LOKI_TYPELIST_1(Widget)&gt; Dispatch;
</code></pre>
<p>probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111124</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Sat, 05 Aug 2006 14:59:15 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 15:03:01 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>keine ahnung, kenn mich mit loki nicht aus. kannst ja mal</p>
<pre><code class="language-cpp">typedef Loki::StaticDispatcher&lt;HatchingExecutor&amp;, Base, LOKI_TYPELIST_1(Widget)&gt; Dispatch;
</code></pre>
<p>probieren.</p>
</blockquote>
<p>Auch gerade gedacht, nur: Intern verwendet die Lib ne Referenz und ich erhalte dann:</p>
<pre><code>/usr/include/loki/MultiMethods.h:45: Fehler: reference wird in Referenztyp »HatchingExecutor&amp;« umgeformt
</code></pre>
<p>Was ist der Sinn eigentlich, dass der Executor bei jedem Dispatch kopiert wird?? Was haben sich die Programmierer dabei gedacht??!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111128</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 05 Aug 2006 15:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to bool ändert sich komischerweise bei Loki::StaticDispatcher on Sat, 05 Aug 2006 16:13:20 GMT]]></title><description><![CDATA[<p>eigentlich müsste go einen executor&amp; nehmen. denn laut dem <a href="http://www.awprofessional.com/content/images/0201704315/samplechapter/alexan11.pdf" rel="nofollow">pdf</a> hier heißt es</p>
<blockquote>
<p>StaticDispatcher implements the Go member function, which takes a BaseLhs&amp;, a BaseRhs&amp;, and an Executor&amp; [...]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1111163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111163</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Sat, 05 Aug 2006 16:13:20 GMT</pubDate></item></channel></rss>