<?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[Code sparen]]></title><description><![CDATA[<p>Hey guyz</p>
<p>Prost neues Jahr erst Mal <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>
<p>Leider lässt einen die Arbeit auch im neuen Jahr nicht einfach so in Ruhe und deshalb steht bei mir bereits wieder folgendes Problem an:</p>
<pre><code class="language-cpp">std::vector&lt;CEMeter&gt; emArray;
std::vector&lt;CLPMeter&gt; lpArray;

// ...

// Read out EMeters  
for(int i = 0; i &lt; emArray.size(); i++) {
   bool blInMtrList = true;
   for(int j = 1; j &lt; argc; j++) {  // Check if current meter is in argument list
   if(strcmp(emArray.at(i).get_strAddress(), argv[j]) == 0) {
      blInMtrList = true;
      break;
   }
   blInMtrList = false;

   if(!blInMtrList) {  // If current meter is not in list, skip it
      continue;
   }
   for(int j = 0; j &lt; 3 &amp;&amp; emArray.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
      sleep((unsigned int) spTmp.get_fTmOut());
   }
   printf(emArray.at(i).get_strDevRep());  // ... and printf response
}

// Read out LPMeters  
for(int i = 0; i &lt; lpArray.size(); i++) {
   bool blInMtrList = true;
   for(int j = 1; j &lt; argc; j++) {  // Check if current meter is in argument list
      if(strcmp(lpArray.at(i).get_strAddress(), argv[j]) == 0) {
         blInMtrList = true;
         break;
      }
      blInMtrList = false;
   }
   if(!blInMtrList) {  // If current meter is not in list, skip it
      continue;
   }
   for(int j = 0; j &lt; 3 &amp;&amp; lpArray.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
      sleep((unsigned int) spTmp.get_fTmOut());
   }
   printf(lpArray.at(i).get_strDevRep());  // ... and printf response
}
</code></pre>
<p>Was da in diesem ganzen Code gemacht wird, spielt eigentlich keine Rolle, denn das funktioniert so weit prima <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="😃"
    /> . Viel schlimmer ist: Eigentlich mache ich hier zwei mal genau dasselbe, nur mit unterschiedlichen Klassen. Die beiden Klassen erben zwar von derselben Vaterfunktion, implementieren die hier gebrauchte Funktion 'rd_Data()' aber separat.</p>
<p>Gibt es an dieser Stelle eine elegante Variante, Code zu sparen? Die Objekte sollten dabei nicht gecastet werden.</p>
<p>Danke für eure Hilfe und beste Grüsse auch ins neue Jahr<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169089/code-sparen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 15:51:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169089.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Jan 2007 20:02:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 20:02:39 GMT]]></title><description><![CDATA[<p>Hey guyz</p>
<p>Prost neues Jahr erst Mal <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>
<p>Leider lässt einen die Arbeit auch im neuen Jahr nicht einfach so in Ruhe und deshalb steht bei mir bereits wieder folgendes Problem an:</p>
<pre><code class="language-cpp">std::vector&lt;CEMeter&gt; emArray;
std::vector&lt;CLPMeter&gt; lpArray;

// ...

// Read out EMeters  
for(int i = 0; i &lt; emArray.size(); i++) {
   bool blInMtrList = true;
   for(int j = 1; j &lt; argc; j++) {  // Check if current meter is in argument list
   if(strcmp(emArray.at(i).get_strAddress(), argv[j]) == 0) {
      blInMtrList = true;
      break;
   }
   blInMtrList = false;

   if(!blInMtrList) {  // If current meter is not in list, skip it
      continue;
   }
   for(int j = 0; j &lt; 3 &amp;&amp; emArray.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
      sleep((unsigned int) spTmp.get_fTmOut());
   }
   printf(emArray.at(i).get_strDevRep());  // ... and printf response
}

// Read out LPMeters  
for(int i = 0; i &lt; lpArray.size(); i++) {
   bool blInMtrList = true;
   for(int j = 1; j &lt; argc; j++) {  // Check if current meter is in argument list
      if(strcmp(lpArray.at(i).get_strAddress(), argv[j]) == 0) {
         blInMtrList = true;
         break;
      }
      blInMtrList = false;
   }
   if(!blInMtrList) {  // If current meter is not in list, skip it
      continue;
   }
   for(int j = 0; j &lt; 3 &amp;&amp; lpArray.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
      sleep((unsigned int) spTmp.get_fTmOut());
   }
   printf(lpArray.at(i).get_strDevRep());  // ... and printf response
}
</code></pre>
<p>Was da in diesem ganzen Code gemacht wird, spielt eigentlich keine Rolle, denn das funktioniert so weit prima <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="😃"
    /> . Viel schlimmer ist: Eigentlich mache ich hier zwei mal genau dasselbe, nur mit unterschiedlichen Klassen. Die beiden Klassen erben zwar von derselben Vaterfunktion, implementieren die hier gebrauchte Funktion 'rd_Data()' aber separat.</p>
<p>Gibt es an dieser Stelle eine elegante Variante, Code zu sparen? Die Objekte sollten dabei nicht gecastet werden.</p>
<p>Danke für eure Hilfe und beste Grüsse auch ins neue Jahr<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200806</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Mon, 01 Jan 2007 20:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 20:10:54 GMT]]></title><description><![CDATA[<p>mach' doch 'ne funktion draus und gib der 'nen pointer auf die basisklasse oder so ähnlich...<br />
:xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200813</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Mon, 01 Jan 2007 20:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 20:11:35 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>mach die Methode in der Basisklasse <a href="http://tutorial.schornboeck.net/virtual.htm" rel="nofollow">virtuel</a> bzw. abstrakt, und benutze Pointer auf die Basisklasse um Nutzen aus Polymorphie zu ziehen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200814</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 01 Jan 2007 20:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 20:49:09 GMT]]></title><description><![CDATA[<p>Ok, das mit der abstrakten Methode ist sicher nicht schlecht, das habe ich bereits 'mal eingebaut <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>
<p>Allerdings ist mein Problem ja, dass ich 2 unterschiedliche Vektoren habe:</p>
<pre><code class="language-cpp">std::vector&lt;CEMeter&gt; emArray;
std::vector&lt;CLPMeter&gt; lpArray;
</code></pre>
<p>Ich kann ja unterschiedliche Objekte nicht in denselben Vektor packen. Also müsste ich in der Schleife 'mal den einen und 'mal den anderen Vektor verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> . Auch wenn ich das ganze in eine Funktion packen würde, müsste ich derselben einen Vektor mitgeben, den sie verwenden soll. Dabei sind die unterschiedlichen Vektortypen 'std::vector&lt;CEMeter&gt;' und 'std::vector&lt;CLPMeter&gt; ' erneut nicht austauschbar...</p>
<p>Und da bleibe ich jetzt irgendwie stecken <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/1200826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200826</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Mon, 01 Jan 2007 20:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 20:56:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>die Schleife must du schon jeweils extra ausführen. Aber alles was in der Schleife ist, kannst du in eine Funktion auslagern, die als Argument einen Pointer auf die Basisklasse entgegennimmt. Dann brauchts du in der konkreten Schleife diese Funktion nur mit der Adresse des aktuellen Arrayelements aufzurufen.</p>
<p>Wenn du die Polymorphie ganz nutzen willst, müßtest du zwei Vektoren mit dem Elementtyp Pointer auf Basisklasse nehmen. Dann wärst du zwar selber für die Speicherverwaltung der Objektinstanzen zuständig, aber könntest eine Funktion schreiben, die so einen vector entgegennimmt und auch die Schleife selbständig abartbeiten kann.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200830</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 01 Jan 2007 20:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 21:37:05 GMT]]></title><description><![CDATA[<p>Also das einzige was mir hier in den Sinn kommt ist die Verwendung eines Funktionstemplates</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void ReadOut(std::vector&lt;T&gt; &amp; arr, char const * argv, int argc)
{
for(int i = 0; i &lt; arr.size(); i++) {
   bool blInMtrList = true;
   for(int j = 1; j &lt; argc; j++) {  // Check if current meter is in argument list
      if(strcmp(arr.at(i).get_strAddress(), argv[j]) == 0) {
         blInMtrList = true;
         break;
      }
      blInMtrList = false;
   }
   if(!blInMtrList) {  // If current meter is not in list, skip it
      continue;
   }
   for(int j = 0; j &lt; 3 &amp;&amp; arr.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
      sleep((unsigned int) spTmp.get_fTmOut());
   }
   printf(arr.at(i).get_strDevRep());  // ... and printf response
}
}
</code></pre>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200847</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 01 Jan 2007 21:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Mon, 01 Jan 2007 22:14:44 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<p>Also das einzige was mir hier in den Sinn kommt ist die Verwendung eines Funktionstemplates</p>
</blockquote>
<p>Genau das war auch mein Gedanke und die Schleife mit 'blInMtrList' sollte man durch ein find ersetzen können:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void ReadOut(std::vector&lt;T&gt; &amp; arr, char const * argv, int argc /*, spTmp */ )
{
for(int i = 0; i &lt; arr.size(); i++) {
    if( find( argv, argv + argc, std::string( arr.at(i).get_strAddress() ) ) != argv + argc ) {
        // If current meter is in list ...
        for(int j = 0; j &lt; 3 &amp;&amp; arr.at(i).rd_Data() == -2; j++) {  // Read out requested meter...
            sleep((unsigned int) spTmp.get_fTmOut());
        }
        printf(arr.at(i).get_strDevRep());  // ... and printf response
    }
}
}
</code></pre>
<p>Dann wird's doch richtig übersichtlich <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=";)"
      alt="😉"
    /></p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200860</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 01 Jan 2007 22:14:44 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Tue, 02 Jan 2007 14:05:31 GMT]]></title><description><![CDATA[<p>Ok, das sieht ja richtig interessant aus. Besonders der 'find' lässt mich ja ziemlich alt aussehen <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>Allerdings eine Frage: Ich habe im Moment eine separate Klasse, wo alle Ausgaben erledigt werden. Elegant wäre es nun, wenn ich diese Funktion dort hinein nehmen könnte. Muss ich dazu nun der gesamten Klasse ein Typentemplate mitgeben oder kann ich das irgendwie auf diese einzige Funktion beschränken?</p>
<p>Thx auf jeden Fall und Greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201166</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Tue, 02 Jan 2007 14:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Tue, 02 Jan 2007 15:24:03 GMT]]></title><description><![CDATA[<p>KessiMC schrieb:</p>
<blockquote>
<p>Ok, das sieht ja richtig interessant aus. Besonders der 'find' lässt mich ja ziemlich alt aussehen <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>Allerdings eine Frage: Ich habe im Moment eine separate Klasse, wo alle Ausgaben erledigt werden. Elegant wäre es nun, wenn ich diese Funktion dort hinein nehmen könnte. Muss ich dazu nun der gesamten Klasse ein Typentemplate mitgeben oder kann ich das irgendwie auf diese einzige Funktion beschränken?</p>
<p>Thx auf jeden Fall und Greeetz<br />
Kessi</p>
</blockquote>
<p>Hi,</p>
<p>es ist möglich das du das einfach als Methodentemplate verwendest.</p>
<p>Sprich innerhalb der Klasse. Die ganze Klasse muss deswegen dann nicht zum Template mutieren <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=";)"
      alt="😉"
    /></p>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201219</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Tue, 02 Jan 2007 15:24:03 GMT</pubDate></item><item><title><![CDATA[Reply to Code sparen on Tue, 02 Jan 2007 16:01:13 GMT]]></title><description><![CDATA[<p>kkk, dann versuch' ich das doch einfach 'mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> .</p>
<p>Thx @all und greeetz<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201254</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Tue, 02 Jan 2007 16:01:13 GMT</pubDate></item></channel></rss>