<?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[Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht]]></title><description><![CDATA[<p>Hallo liebe Forumsbesucher</p>
<p>Also mein Ziel: Habe einige Checkboxen (bitte nicht nach GUI verschieben, hat nichts damit zu tun) deren Zustand frag ich ab mit IsChecked() was ein bool zurückgibt.<br />
Die Zustände will ich einer Funktion übergeben, die nichts mit der GUI zu tun hat, die Checkboxen also nicht kennt. Kann und will die auch nicht bekannt machen, denn die sind private in der Fensterklasse.<br />
Die einzige Idee die ich bis jetzt habe ist, eine struct voller bools zu machen und die alle zu setzen:</p>
<pre><code class="language-cpp">struct Zustand {
    bool Ist1;
    bool Ist2;
// ...
};

Zustand.Ist1 = Check1.IsChecked();
Zustand.Ist2 = Check2.IsChecked();
//  und das &gt;20 mal..blubb..
</code></pre>
<p>Naja nicht so prickelnd.<br />
Übler wirds in der Funktion, die den Zustand auswerten soll.</p>
<pre><code class="language-cpp">void Auswerten( Zustand Ist ) {
    if( !Ist.Ist1 ) {
        // Tu dies und das
    }
    if( !Ist.Ist2 ) {
        // Benzin nachfüllen
    }
//  und das wieder &gt;20 mal..blubberblubberblubb..
</code></pre>
<p>Find ich nicht sehr toll und ist sicher auch nicht sehr effizient.<br />
Gibbet da keine bessere Lösung?</p>
<p>Danke euch schonmal im Voraus recht herzlich<br />
MfG<br />
Heinz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187959/mag-keine-spaghetti-vereinfachung-für-if-orgie-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:03:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187959.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jul 2007 19:23:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:23:41 GMT]]></title><description><![CDATA[<p>Hallo liebe Forumsbesucher</p>
<p>Also mein Ziel: Habe einige Checkboxen (bitte nicht nach GUI verschieben, hat nichts damit zu tun) deren Zustand frag ich ab mit IsChecked() was ein bool zurückgibt.<br />
Die Zustände will ich einer Funktion übergeben, die nichts mit der GUI zu tun hat, die Checkboxen also nicht kennt. Kann und will die auch nicht bekannt machen, denn die sind private in der Fensterklasse.<br />
Die einzige Idee die ich bis jetzt habe ist, eine struct voller bools zu machen und die alle zu setzen:</p>
<pre><code class="language-cpp">struct Zustand {
    bool Ist1;
    bool Ist2;
// ...
};

Zustand.Ist1 = Check1.IsChecked();
Zustand.Ist2 = Check2.IsChecked();
//  und das &gt;20 mal..blubb..
</code></pre>
<p>Naja nicht so prickelnd.<br />
Übler wirds in der Funktion, die den Zustand auswerten soll.</p>
<pre><code class="language-cpp">void Auswerten( Zustand Ist ) {
    if( !Ist.Ist1 ) {
        // Tu dies und das
    }
    if( !Ist.Ist2 ) {
        // Benzin nachfüllen
    }
//  und das wieder &gt;20 mal..blubberblubberblubb..
</code></pre>
<p>Find ich nicht sehr toll und ist sicher auch nicht sehr effizient.<br />
Gibbet da keine bessere Lösung?</p>
<p>Danke euch schonmal im Voraus recht herzlich<br />
MfG<br />
Heinz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332529</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:27:42 GMT]]></title><description><![CDATA[<p>Masch n voll krasses bool array und einz mit Funktionspointern und dann drüb3rloopen.</p>
<p>verschtescht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332535</guid><dc:creator><![CDATA[UBER Hoxxar]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:41:26 GMT]]></title><description><![CDATA[<p>UBER Hoxxar schrieb:</p>
<blockquote>
<p>Masch n voll krasses bool array und einz mit Funktionspointern und dann drüb3rloopen.</p>
<p>verschtescht?</p>
</blockquote>
<p>nee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332548</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:45:21 GMT]]></title><description><![CDATA[<p>du sollst alles in ein array packen.</p>
<p>jedesmal wenn du</p>
<p>a1, a2, a3,...<br />
hast, dann schreit das nach: GIB MIR EIN ARRAY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332556</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:45:21 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:57:26 GMT]]></title><description><![CDATA[<p>yo der verschtetz</p>
<pre><code class="language-cpp">for(int ... 20) zustand[i] = checkbox[i];

void (*fp[20])(void);
fp[0] = tuDasFunktion;
...

for(int ... 20) if(zustand[i]) (*fp[i])();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1332562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332562</guid><dc:creator><![CDATA[UBER Hoxxar]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:57:26 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 19:58:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>du hast ja wahrscheinlich sowas:</p>
<pre><code class="language-cpp">class Win {

   private: CheckBox Check1, Chek2, ...
};
</code></pre>
<p>Dann packste am besten alle erstmal zusammen:</p>
<pre><code class="language-cpp">class Win {

   private: vector&lt;CheckBox&gt; checkis; 
};
</code></pre>
<p>Und legst die ganzen CheckBoxen mit checkis.push_back(CheckBox(...)) an.</p>
<p>Dann hast du ja noch deine tuediesunddas(), fillBenzin() etc ...</p>
<pre><code class="language-cpp">void tuediesunddas() { ... };
void fillBenzin() { };
</code></pre>
<p>Dann legst du dir noch eine map an, die sich merkt welche CheckboxNr was tut:</p>
<pre><code class="language-cpp">class Win {

   private: 
        typedef void (Win::*functions)(); 

        vector&lt;CheckBox&gt; checkis; 
        map&lt;size_t,functions&gt; checkisdo;
};
</code></pre>
<p>Dann registrierste du die ganzen Funktion mit den zugehörigen Checkboxen:</p>
<pre><code class="language-cpp">checkis[0] = &amp;Win::tuediesunddas;
checkis[1] = &amp;Win::fillBenzin;
...
</code></pre>
<p>Nun kannst du bequem durch dein Vector durchiterieren und den Status prüfen und jenachdem reagieren:</p>
<pre><code class="language-cpp">for(size_t i = 0; i &lt; checkis.size(); ++i)
    if(checkis[i].isChecked()) (this-&gt;*checkisdo[i])();
</code></pre>
<p>Alternativ kannst du auch sowas benutzen: map&lt;CheckBox,functions&gt; und zudem boost:function oder tr1::function.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332563</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Jul 2007 19:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Wed, 25 Jul 2007 20:27:32 GMT]]></title><description><![CDATA[<p>Aso..jetzt kapier ichs, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332583</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Wed, 25 Jul 2007 20:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Thu, 26 Jul 2007 05:24:23 GMT]]></title><description><![CDATA[<p>*grosskotz an*...oder Du schaffst Dir ein ordentliches Objektnetz nach MVC-Schema, in dem das Framework das übernimmt.*grosskotz aus*<br />
Nein im Ernst, ich weiß nicht, wie groß Deine Anwendung ist, aber grundsätzlich würde ich maximal nur das zusammen in ein Array werfen, was 'fachlich' auch zusammengehört, also z.B. auch zusammen in der GUI gruppiert ist.<br />
btw: Hängt natürlich auch von dem ab, was Deine Anwendung machen soll: Was spricht dagegen, für jeden boolschen Wert einen Accessor zu verwenden (also isTankLeer...)? Sauberer ist es allemal.<br />
Zumindest deute ich Deine Namen 'Zustand' etc. so, das hört sich nicht nach einfacher Ablaufsteuerung an, sondern so, dass da evtl. noch mehr mit gemacht werden muß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332669</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Jul 2007 05:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Sun, 29 Jul 2007 14:01:47 GMT]]></title><description><![CDATA[<p>Also es geht um eine Checkliste.<br />
Die Checkboxen gehören alle zusammen.<br />
Für jedes angeklickte soll eine Funktion ausgeführt werden, wenn man auf &quot;GO&quot; klickt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334353</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Sun, 29 Jul 2007 14:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Sun, 29 Jul 2007 14:17:31 GMT]]></title><description><![CDATA[<p>Hast du die ganzen Beiträge gesehen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334374</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Jul 2007 14:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Sun, 29 Jul 2007 15:35:51 GMT]]></title><description><![CDATA[<p>Ja, aber das war die Antwort auf den letzten Beitrag von SammyRukka der Fragen enthielt.</p>
<p>Meine Frage ist geklärt soweit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334416</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Sun, 29 Jul 2007 15:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Sun, 29 Jul 2007 16:09:01 GMT]]></title><description><![CDATA[<p>Nun gut, bei der Aufgabenstellung würde ich auch nicht auf so'n Grosskotz hören <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Dann passt die beschriebene Lösung ja. Wobei ich an der Stelle trotzdem den if/else if-Verteiler benutzen würde, allein deshalb, weil andere ich ich selbst in 3 Jahren ihn auch noch verstehen würde(n).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334425</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Jul 2007 16:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Sun, 29 Jul 2007 16:59:07 GMT]]></title><description><![CDATA[<p>Aso ^^</p>
<p>Kannst du mir das mit dem Accessor noch genauer erklären?<br />
Du meinst in der Fensterklasse solche Funktionen einbauen und die dann von der anderen Klasse aus aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334450</guid><dc:creator><![CDATA[Heinzheiss]]></dc:creator><pubDate>Sun, 29 Jul 2007 16:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Mag keine Spaghetti - Vereinfachung für if() Orgie gesucht on Mon, 30 Jul 2007 05:47:31 GMT]]></title><description><![CDATA[<p>Naja, für Deinen Fall ist das wohl (wie vermutet) etwas oversized.<br />
Accessoren benutzt Du eigentlich nur, um den Zugriff auf Deine Attribute zu kapseln/kanalisieren. Das Attribut ist also private und nur die Accessoren (Getter/Setter) sind public. Das gibt Dir u.a. die Möglichkeit so etwas wie Logging, Event-Handling oder Attribut-Plausibilisierungen einzubauen, einfach dadurch, dass Du sicher sein kannst, dass alle Attribut-Änderungen über die Acessoren laufen. Auch Ausnahmen widerum könnten in manchen Fällen sinnvoll sein.</p>
<p>So richtig wird ein Schuh daraus, wenn Deine Anwendung dann noch einen MVC (Modell-View-Controller) implementiert und Du Deine Modell-Schicht damit versiehst. MVC ist die Trennung in Modellebene und Darstellungsschicht, 'verbunden' durch eine Controllerschicht.<br />
In dem Fall gibt's dann genug Bedarf an Accessoren (siehe Beispiele).</p>
<p>In Deinem Fall ist jetzt natürlich die Frage, wo Du den Schnitt ansetzen würdest. Aber wie gesagt, dass ist sicher oversized. Für meinen privaten Spielkram halte ich einen MVC auch nicht wirklich durch.</p>
<p>Bleib man bei Deiner Lösung und sieh die bei Interesse einfach mal diverse MVC Implementationen an. Solltest Du auch Java beherrschen, dann riskiere mal einen Blick auf das Spingframework.</p>
<p>Ansonsten:</p>
<blockquote>
<p>Nun gut, bei der Aufgabenstellung würde ich auch nicht auf so'n Grosskotz hören <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Dann passt die beschriebene Lösung ja. Wobei ich an der Stelle trotzdem den if/else if-Verteiler benutzen würde, allein deshalb, weil andere ich ich selbst in 3 Jahren ihn auch noch verstehen würde(n).</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1334714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334714</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 30 Jul 2007 05:47:31 GMT</pubDate></item></channel></rss>