<?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[Methoden zusammenfassen]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Ich habe gerade zwei Methoden, die im Wesentlichen folgendem Code entsprechen. Gibt es eine Möglichkeit, die beiden elegant zusammenzufassen?</p>
<pre><code class="language-cpp">void fooclass::foo1()
{
	int a = getA();

	switch (a)
	{
	case 1:
		ptr = &amp;some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}

void fooclass::foo2()
{
	int a = getA();

	switch (a)
	{
	case 1:
		val = some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}
</code></pre>
<p>Ich hoffe ich habe mein Problem einigermaßen verständlich umrissen.</p>
<p>Danke im Voraus<br />
MfG Cox (ohne Schlussfloskel wirkt sowas einfach plump(er) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248822/methoden-zusammenfassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 18:21:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248822.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 29 Aug 2009 19:30:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 19:30:47 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Ich habe gerade zwei Methoden, die im Wesentlichen folgendem Code entsprechen. Gibt es eine Möglichkeit, die beiden elegant zusammenzufassen?</p>
<pre><code class="language-cpp">void fooclass::foo1()
{
	int a = getA();

	switch (a)
	{
	case 1:
		ptr = &amp;some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}

void fooclass::foo2()
{
	int a = getA();

	switch (a)
	{
	case 1:
		val = some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}
</code></pre>
<p>Ich hoffe ich habe mein Problem einigermaßen verständlich umrissen.</p>
<p>Danke im Voraus<br />
MfG Cox (ohne Schlussfloskel wirkt sowas einfach plump(er) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768956</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sat, 29 Aug 2009 19:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 19:37:45 GMT]]></title><description><![CDATA[<p>Du könntest durch einen Parameter abfragen, was mit der lokalen Variable passieren soll. Also in der Art:</p>
<pre><code class="language-cpp">void fooclass::foo( bool instance )
{
	int a = getA( );

	if( instance )
	{
		switch (a)
		{
			case 1:
		    ptr = &amp;some_value;
            break;

            // ... 10 andere Fälle

	        default:
            std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
			break;
    }
	else
	{
		 switch (a)
		 {
			 case 1:
             val = some_value;
             break;

             // ... 10 andere Fälle

             default:
             std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
			 break;
    }
};
</code></pre>
<p>(Ungetestet) Nur so eine Idee...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768963</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Sat, 29 Aug 2009 19:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 19:40:45 GMT]]></title><description><![CDATA[<p>Das hab ich mir auch schon überlegt. Nur leider kürzt das den vorhandenen Code nicht wirklich, und bringt nur eine Verschachetlung mehr hinein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768965</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sat, 29 Aug 2009 19:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 19:43:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void fooclass::foo1()
{
	int a = getA();

	switch (a)
	{
	case 1:
		val = some_value;
		ptr = &amp;some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1768966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768966</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Sat, 29 Aug 2009 19:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 19:44:03 GMT]]></title><description><![CDATA[<p>Dann gib mal etwas mehr Informationen:<br />
Wann wird foo1 und wann foo2 aufgerufen?<br />
Kann man evtl beides (val und ptr) auf einemal setzen?<br />
Wodrin unterscheiden sich die &quot;10 anderen Fälle&quot;? ptr? some_value?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768967</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Sat, 29 Aug 2009 19:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 20:06:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void fooclass::foo1()
{
	int a = getA();

	switch (a)
	{
	case 1:
		ptr = &amp;some_value;
		break;

	// ... 10 andere Fälle

	default:
		std::cout &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}

    // Wie wär's damit?
    val = *ptr;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1768983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768983</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Sat, 29 Aug 2009 20:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 20:12:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3820">@Troll</a>: Da wird aber jemand seinem Namen gerecht <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="😃"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17281">@lagalopex</a>:<br />
a ist bei beiden Methoden unterschiedlich, die anderen 10 Fälle unterscheiden sich in some_value bzw. &amp;some_value.<br />
Wobei es sich im eigentlichen Programm nicht um eine Variable sondern um ein paar unterschiedliche assoziative Container handelt, die ich je nach a verschieden behandeln will.<br />
foo1 und foo2 werden nacheinander aufgerufen. Der Grund, warum ich dann überhaupt 2 Methoden verwende, ist einfach der, dass beide Codeabschnitte ca. 30 Zeilen lang sind, und ich 60 Zeilen in einer Funktion gern vermeiden würde. Das ganze auf eine Methode zu kürzen würde mich halt reizen, aber ich weiß eben nicht wie.</p>
<p>Ich bin mir einfach unsicher, wie ich es handhaben sollte.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16419">@OhneName</a>:<br />
Wird leider nicht möglich sein, da val und *ptr nicht den selben Wert darstellen, und die Operation die ich mit val und ptr durchführe ebenfalls situationsabhängig ist. Ein wenig dämlich zu erklären ohne euch mit Code zu erschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768985</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sat, 29 Aug 2009 20:12:19 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 20:21:33 GMT]]></title><description><![CDATA[<p>Evtl. so:</p>
<pre><code class="language-cpp">void fooclass::foo(bool copy)
{
	irgendeintyp *tmpptr;

	switch (getA()) 
	{ 
	case 1:	tmpptr = &amp;some_value; 
		break; 

	// ... 10 andere Fälle 

	default:std::cout &lt;&lt; &quot;(EE) Invalid!&quot; &lt;&lt; std::endl;
		return;
	}

	if (copy)
		val = *tmpptr;
	else
		ptr = tmpptr;
}
</code></pre>
<p>Wobei mir das ganze etwas merkwürdig erscheint...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768992</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Sat, 29 Aug 2009 20:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 20:29:19 GMT]]></title><description><![CDATA[<p>ich würde gerne mal die fkt., genau so wie sie jetzt sind, sehen. sind nur 60 zeilen oder so und man hat die chance, zu verstehen, was du brauchst^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1768999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1768999</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 29 Aug 2009 20:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 20:58:28 GMT]]></title><description><![CDATA[<p>Ok, ok <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="🙂"
    /><br />
Wobei &quot;10 Andere Fälle&quot; ein wenig übertrieben war...entschuldigt aber bitte, wenn ich das ganze in Bezug auf Namensgebung trotzdem verallgemeinere.</p>
<pre><code class="language-cpp">void fooclass::set_ptr()
{
	type t = classify(string);

	switch (t)
	{
	case type1:
		ptr = &amp;map1[string];
		break;

	case type2:
		ptr  = &amp;map2[string];
		break;

	case type3:
		ptr  = &amp;map3[string];
		break;

	case type4:
		ptr = NULL;

	default:
		std::cerr &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}

void fooclass::set_val()
{
	type t = classify(string);

	switch (t) 
	{
	case type1:
		val = map1[string];
		break;

	case type2:
		val = map2[string];
		break;

	case type3:
		val = map3[string];
		break;

	case type4:
		val = 0;

	default:
		std::cerr &lt;&lt; &quot;(EE) Invalid!\n&quot;;
	}
}
</code></pre>
<p>Ich bin gerade am Überlegen, ob es nicht sinnvoller wäre, die 3 maps zusammenzulegen, eventuell in eine zweidimensionale Map / Vektor und direkt mit den Konstanten als Indices arbeiten. Die &amp;map [...] / map[...]-Problematik löst sich dadurch aber leider auch nicht in Luft auf. Bin mir aber auch hier unsicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769022</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sat, 29 Aug 2009 20:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 21:43:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void fooclass::set_ptr() 
{ 
    type t = classify(string); 

    switch (t) 
    { 
    case type1: 
        ptr = &amp;map1[string]; 
        break; 

    case type2: 
        ptr  = &amp;map2[string]; 
        break; 

    case type3: 
        ptr  = &amp;map3[string]; 
        break; 

    case type4: 
        ptr = NULL; 
        break; //

    default:
        throw std::invalid_argument(&quot;EE bla&quot;);
    } 

	if(ptr)
		val = *ptr;
	else
		val = 0;
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769054</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 29 Aug 2009 21:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 22:48:51 GMT]]></title><description><![CDATA[<p>Cox schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16419">@OhneName</a>:<br />
Wird leider nicht möglich sein, da val und *ptr nicht den selben Wert darstellen, und die Operation die ich mit val und ptr durchführe ebenfalls situationsabhängig ist. Ein wenig dämlich zu erklären ohne euch mit Code zu erschlagen.</p>
</blockquote>
<p>So langsam glaub ich selbst nicht mehr dran, aber mein Sourcecode sagt das eindeutig aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769080</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sat, 29 Aug 2009 22:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sat, 29 Aug 2009 23:24:19 GMT]]></title><description><![CDATA[<p>du hattest oben auch mal von nem array of maps geredet - ich würds so machen, wenn die maps die gleichen typen haben - und das scheint ja so zu sein ^^<br />
ich würd vector (bzw tr1::array) nehmen, dann bleibt der Zugriff in O(1), genau wie jetzt auch^^ allerdings hätte ich die einträge wahrscheinlich so und so gemischt und die nr. iwo in das objekt mit reingehauen, was die map speichert - bin ich mir zwar nich ganz sicher, ob ich das gemacht hätte, weil ich den sourcecode nicht kenn, aber zumindest hätte ich drüber nachgedacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769089</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 29 Aug 2009 23:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sun, 30 Aug 2009 10:14:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">valtype&amp; fooclass::get_ref()
{
  type t = classify(string);
  switch (t)
  {
    case type1: return map1[string];
    case type2: return map2[string];
    /* ... */ usw.
  }
}

void fooclass::set_ptr()
{
  valtype&amp; ref=get_ref();
  ptr = &amp;valtype;
}

void fooclass::set_val()
{
  val = get_ref();
}
</code></pre>
<p>Die Überlegung mit den zweidimensionalen Maps wäre natürlich immernoch möglich. Oder du baust den switch so um, dass er abhängig von classify() einfach eine Referenz auf die richtige map liefert, vorausgesetzt die haben alle den selben Typen (was ja der Fall zu sein scheint).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769159</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 30 Aug 2009 10:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Methoden zusammenfassen on Sun, 30 Aug 2009 11:17:12 GMT]]></title><description><![CDATA[<p>Die Idee mit der Referenz ist super, danke pumuckl. Nichtsdestoweniger werde ich es mit einem Array of Maps probieren, ich glaube das ist komfortabler.</p>
<p>Vielen Dank euch allen für die wie immer schnellen, netten und nicht zuletzt sehr hilfreichen antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769192</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Sun, 30 Aug 2009 11:17:12 GMT</pubDate></item></channel></rss>