<?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[Geht das eleganter?]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgende Situation:</p>
<p>Ich habe eine Klasse die aus einer Datei Daten liest. Die Datei kann aus bytes, floats etc bestehen. Gelöst habe ich das im Moment so: Die Klasse hat einen void* foo und der Ctor bekommt ein Flag übergeben, dass der Klasse sagt aus was die Datei besteht. Also im Pseudocode:</p>
<pre><code class="language-cpp">if(m_dataType == TYPE_BYTE) foo = new BYTE[X];
else if(m_dataType == TYPE_FLOAT) foo = new FLOAT[X];
</code></pre>
<p>In den Memberfunktionen greife ich dann immer auf das Array zu und muss leider ständig Fallunterscheidungen machen und dann entsprechend casten:</p>
<pre><code class="language-cpp">method() {
...
if(m_dataType == TYPE_FLOAT) {
   y = (static_cast&lt;FLOAT*&gt;(foo))[index] * scaleY;
} else if(m_dataType == TYPE_BYTE) {
   y = (static_cast&lt;BYTE*&gt;(foo))[index] * scaleY;
}
</code></pre>
<p>Das geht zwar aber ich finde es nicht sehr elegant (zum einen den void* und dann noch die ständigen ifs()). Könnte man das irgendwie eleganter machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224921/geht-das-eleganter</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 18:09:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224921.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Oct 2008 17:29:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Geht das eleganter? on Thu, 16 Oct 2008 17:29:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgende Situation:</p>
<p>Ich habe eine Klasse die aus einer Datei Daten liest. Die Datei kann aus bytes, floats etc bestehen. Gelöst habe ich das im Moment so: Die Klasse hat einen void* foo und der Ctor bekommt ein Flag übergeben, dass der Klasse sagt aus was die Datei besteht. Also im Pseudocode:</p>
<pre><code class="language-cpp">if(m_dataType == TYPE_BYTE) foo = new BYTE[X];
else if(m_dataType == TYPE_FLOAT) foo = new FLOAT[X];
</code></pre>
<p>In den Memberfunktionen greife ich dann immer auf das Array zu und muss leider ständig Fallunterscheidungen machen und dann entsprechend casten:</p>
<pre><code class="language-cpp">method() {
...
if(m_dataType == TYPE_FLOAT) {
   y = (static_cast&lt;FLOAT*&gt;(foo))[index] * scaleY;
} else if(m_dataType == TYPE_BYTE) {
   y = (static_cast&lt;BYTE*&gt;(foo))[index] * scaleY;
}
</code></pre>
<p>Das geht zwar aber ich finde es nicht sehr elegant (zum einen den void* und dann noch die ständigen ifs()). Könnte man das irgendwie eleganter machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600054</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Thu, 16 Oct 2008 17:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Thu, 16 Oct 2008 18:46:18 GMT]]></title><description><![CDATA[<p>Ich denke dass Templates das sind, wonach du suchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600108</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Thu, 16 Oct 2008 18:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Thu, 16 Oct 2008 18:50:10 GMT]]></title><description><![CDATA[<p>Und wie sieht das konkret aus? Die Klasse hat ja an sich nichts mit Templates am Hut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600112</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Thu, 16 Oct 2008 18:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Fri, 17 Oct 2008 05:38:59 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Und wie sieht das konkret aus? Die Klasse hat ja an sich nichts mit Templates am Hut.</p>
</blockquote>
<p>Dann hast du den Sinn von templates nicht ganz verstanden. Mit einem Template kannst du eine Klasse generieren lassen, die deinen Anforderungen entspricht.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class foo
{
public:
    foo ():m_dataType (){}
    ~foo ()
    {
       if ( m_dataType )
           delete[] m_dataType;
    }
    void bar (int x)
    {
        m_dataType = new T[x];
    }
private:
    T* m_dataType;
};
...
foo f&lt;int&gt; i; //T ist int
foo g&lt;float&gt; f; // T ist float
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1600210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600210</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 17 Oct 2008 05:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Fri, 17 Oct 2008 12:42:03 GMT]]></title><description><![CDATA[<p><strong>@ drakon:</strong><br />
Wieso verwendest du statt deines Beispiels nicht einfach Container? Oder ging es nur darum, die Einsatzmöglichkeit von Templates zu erläutern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600406</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Oct 2008 12:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Fri, 17 Oct 2008 15:21:59 GMT]]></title><description><![CDATA[<p>Eigentlich will ich nicht eine Klasse verwenden. Aber aus Interesse: Welche wäre der geeignetste Container aus der STL? Meine Arraygröße ist ja immer Konstant, sowas wie std::vector brauch ich also nicht)</p>
<p>Mit einem normalen Array gibt es also keine Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600495</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Fri, 17 Oct 2008 15:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Fri, 17 Oct 2008 15:34:56 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Mit einem normalen Array gibt es also keine Möglichkeit?</p>
</blockquote>
<p>Wenn du keine Klassen und somit keine Templates verwendet willst, geht das nur hässlich mit <code>void</code> -Zeigern, wie es halt üblich in C ist. Aus welchem Grund willst du Klassen meiden? Wir sind hier schliesslich in C++ und du hast nach einer eleganten Lösung gefragt...</p>
<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Welche wäre der geeignetste Container aus der STL? Meine Arraygröße ist ja immer Konstant, sowas wie std::vector brauch ich also nicht)</p>
</blockquote>
<p>Du könntest <code>std::tr1::array</code> (wenn nicht vorhanden, <code>boost::array</code> ) verwenden. Einen <code>std::vector</code> kannst du aber auch verwenden, wenn du die Funktionalität zur dynamischen Grössenänderung nicht nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600499</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Oct 2008 15:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 00:26:24 GMT]]></title><description><![CDATA[<p>Hm naja ok, also std::tr1::array. Aber auch da muss ich ja einen Typ angeben, also std::tr1::array&lt;int, 4&gt; oder std::tr1::array&lt;float, 4&gt; etc. Wie leg ich dann im Ctor ein tr1::array mit dem richtigen Typ an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600652</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 00:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 00:33:22 GMT]]></title><description><![CDATA[<p>Darf ich fragen, was diese gemischten Werte darstellen? Vielleicht haben sie ja auch semantisch unterschiedliche Bedeutungen und es böte(n) sich evtl struct(s) an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600654</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 00:33:22 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 00:40:45 GMT]]></title><description><![CDATA[<p>Naja, der Sinn ist folgender: Die Klasse liest eine raw-Datei ein, die entweder aus lauter INTs, oder floats oder anderen Typen besteht. Im Moment löse ich das wie im 1. Posting beschrieben so:</p>
<pre><code class="language-cpp">class Foo {
public:
   void* data;

Foo(DATA_TYPE dataType) {
   if(m_dataType == TYPE_BYTE) data = new BYTE[X];
   else if(m_dataType == TYPE_FLOAT) data = new FLOAT[X];
   ...
};
</code></pre>
<p>Nur muss ich dann beim Lesen aufs Array immer eine Fallunterscheidung machen, um einen entsprechenden Cast auszuführen.</p>
<p>Wie ich nun den void* data durch ein std::tr1::array ersetzen kann ist mir nicht ganz klar. Dazu brauch ich ja den Typen, aber den kenn ich ja nicht bei der Deklaration der Klasse. Ich müsste wohl also sowas schreiben:<br />
std::tr1::array&lt;T&gt; und Foo zu einer Template Klasse machen, oder? Aber das will ich auf keinen Fall, denn Foo hat mit Templates ja eigentlich nix am Hut <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=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600655</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 00:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 00:48:08 GMT]]></title><description><![CDATA[<p>Oh, sorry, dann hatte ich das falsch verstanden. Ich dachte, es würden gemischt floats, ints usw drinstehen.</p>
<p>Vielleicht kann man sich der Lösung von einer anderen Seite nähern: Was machst du denn alles mit den Daten? Was für Funktionen wendest du darauf an, wie und wo modifizierst du die Daten oder liest welche aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600658</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 00:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 00:54:36 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Was machst du denn alles mit den Daten?</p>
</blockquote>
<p>Nur lesen, sonst nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600661</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 00:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 01:07:56 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Was machst du denn alles mit den Daten?</p>
</blockquote>
<p>Nur lesen, sonst nichts.</p>
</blockquote>
<p>Komm schon, nicht so wortkarg, welchen Weg nehmen die Daten? Wohin werden sie weiterverarbeitet? Oder spannst du sie einfach nur ständig für Rechenoperationen ein, wie du im Anfangspost gezeigt hast:</p>
<pre><code class="language-cpp">if(m_dataType == TYPE_FLOAT) {
   y = (static_cast&lt;FLOAT*&gt;(foo))[index] * scaleY;
} else if(m_dataType == TYPE_BYTE) {
   y = (static_cast&lt;BYTE*&gt;(foo))[index] * scaleY;
}
</code></pre>
<p>? Weil dann kannst du sie auch alle in einem double-Container speichern, da passen sowohl Bytes, als auch floats und ints super rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600664</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 01:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 01:15:48 GMT]]></title><description><![CDATA[<p>Ich greife eben ausschließlich lesend auf die Daten zu (und multiplizere den Wert dann, aber das is ja egal), so wie in dem kurzen Code-Ausschnitt. Eigentlich brauche ich also nur sowas:<br />
data[index] * bla;<br />
aber das geht ja leider nicht, da data vom Typ void* ist.</p>
<p>Und ich denke das Speichern von BYTEs oder ints in einem double Array wäre nicht so ratsam <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1600666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600666</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 01:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 09:21:27 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p><strong>@ drakon:</strong><br />
Wieso verwendest du statt deines Beispiels nicht einfach Container? Oder ging es nur darum, die Einsatzmöglichkeit von Templates zu erläutern?</p>
</blockquote>
<p>Nein. Er will ja je nach Datenyp, der in der Datei steht eine andere Klasse haben, was genau der Anwendungszweck von Templates ist.</p>
<blockquote>
<p>Die Klasse hat einen void* foo und der Ctor bekommt ein Flag übergeben, dass der Klasse sagt aus was die Datei besteht. Also im Pseudocode:</p>
</blockquote>
<p>Allerdings kommt die Vermutung auf, dass er das zur Laufzeit entscheiden möchte. Was dann die naheliegende Lösung über virtuelle Funktionen suggeriert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600712</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 18 Oct 2008 09:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 10:37:37 GMT]]></title><description><![CDATA[<p>google mal nach dem factory pattern, vielleicht gibt dir das einen Anreiz was du machen könntest. So spärlich wie du mit deinen Informationen umgehst kann dir leider auch nur spärlich geholfen werden.<br />
Ganz grob skizziert würde ich es so machen:</p>
<p>- Untersuche, welche Programmteile abhängig von dem Datentyp sind<br />
- definiere eine Schnittstelle zu diesen Programmteilen, die Schnittstelle muss unabhängig von dem Typ sein<br />
- diese Schnittstelle deklarierst du als abstrakte Klasse<br />
- definiere ein klassentemplate (templateparameter ist der typ), das diese Schnittstelle implementiert<br />
- erstelle eine factory(-methode), die ermittelt welcher typ verwendet wird und die entsprechende Schnittstellenimplementation zurückliefert.</p>
<p>damit hast du den typabhängigen teil gekapselt und fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600744</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 18 Oct 2008 10:37:37 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 11:07:58 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Und ich denke das Speichern von BYTEs oder ints in einem double Array wäre nicht so ratsam <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>
</blockquote>
<p>Warum denn nicht, oder gibt's Speicherplatzprobleme? Wie viele Werte sind's denn ungefähr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600753</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 11:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 13:29:11 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>So spärlich wie du mit deinen Informationen umgehst kann dir leider auch nur spärlich geholfen werden.</p>
</blockquote>
<p>Hm, ich habe doch bereits alles genau beschrieben?!</p>
<p>Aber ich kann ja gerne nochmal alles wiederholen:<br />
Das ist die Klasse:</p>
<pre><code class="language-cpp">public:
   void* data;

Foo(DATA_TYPE dataType) {
   if(m_dataType == TYPE_BYTE) data = new BYTE[X];
   else if(m_dataType == TYPE_FLOAT) data = new FLOAT[X];
   // Hier lese ich jetzt eine raw Datei und fülle damit das Array data
};
</code></pre>
<p>In Methoden von Foo greife ich dann lesend auf die Daten zu:</p>
<pre><code class="language-cpp">if(m_dataType == TYPE_FLOAT) {
   y = (static_cast&lt;FLOAT*&gt;(foo))[index] * scaleY;
} else if(m_dataType == TYPE_BYTE) {
   y = (static_cast&lt;BYTE*&gt;(foo))[index] * scaleY;
}
</code></pre>
<p>wobei ich eben jedesmal leider eine Fallunterscheidung machen muss.<br />
Wie ich das mit tr1::array machen könnte ist mir nicht wirklich klar (da muss ich ja einen Typ angeben aber den kenne ich erst zur Laufzeit). Und wie das mit dem Factory Pattern gehen soll is mir auch nicht klar - wie würde denn da der Ctor von Foo aussehen?</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Warum denn nicht, oder gibt's Speicherplatzprobleme?</p>
</blockquote>
<p>Das hätte doch nur Nachteile. Wenn ich ein double array anlege und das mit chars fülle, dann bedeutet data[1] ein offset von sizeof(double) und ich erreiche z.B. danmit gleich den 8 char. Die chars davor sind nicht erreichbar. Außerdem muss ich trotzdem wieder rumcasten, damit das Bitmuster richtig interpretiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600802</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 13:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 13:45:42 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Warum denn nicht, oder gibt's Speicherplatzprobleme?</p>
</blockquote>
<p>Das hätte doch nur Nachteile. Wenn ich ein double array anlege und das mit chars fülle, dann bedeutet data[1] ein offset von sizeof(double) und ich erreiche z.B. danmit gleich den 8 char. Die chars davor sind nicht erreichbar. Außerdem muss ich trotzdem wieder rumcasten, damit das Bitmuster richtig interpretiert wird.</p>
</blockquote>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox16731" checked="true" /><label for="checkbox16731">auf die Werte zugreifen, ohne casten, Bit-Frickeleien oder eigenen Klassen.</label></div></p>
<p>edit: Also einfach so (mit Textdatei values.txt):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
	// Datei öffnen
	std::ifstream file( &quot;values.txt&quot; );
	if ( ! file )
		return 0;

	// Datei einlesen
	std::vector&lt;double&gt; arr;
	std::copy( std::istream_iterator&lt;double&gt;(file), std::istream_iterator&lt;double&gt;(), std::back_inserter(arr) );

	// Werte ausgeben
	for ( size_t i=0; i&lt;arr.size(); ++i )
		std::cout &lt;&lt; arr[i] &lt;&lt; std::endl;
    // Oder auch:  std::copy( arr.begin(), arr.end(), std::ostream_iterator&lt;double&gt;(std::cout,&quot;\n&quot;) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1600806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600806</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 13:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 13:44:15 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Hm, ich habe doch bereits alles genau beschrieben?</p>
</blockquote>
<p>Mitnichten. Und der Nick passt auch nicht zu den geposteten. Den &quot;Eleganz&quot; suchst du nicht, dann würdest du dein gesamtes Design nochmal überdenken und nicht so verbohrt auf deinen unsauberen Codeschnipsel sein. Alles was ich von dir gelesen habe ist eher die Suche nach Effizienz was aber meistens der Eleganz zu wieder läuft.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600810</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 18 Oct 2008 13:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 14:03:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a>: Dein Code klappt nicht. arr[i] liefert nun mal immer doubles...</p>
<p>Ich habe das Problem EXAKT beschrieben. Und natürlich sollte es &quot;elegant&quot; UND effizient sein (was kein Widerspruch ist). Naja, da mir offenbar niemand ein paar konkrete (!) Codeschnippsel zeigen kann, bleibe ich einfach bei meinem void*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600817</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 14:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 14:11:48 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Naja, da mir offenbar niemand ein paar konkrete (!) Codeschnippsel zeigen kann, bleibe ich einfach bei meinem void*.</p>
</blockquote>
<p>Dein Problem - hier stört es niemanden, wenn du unsauberen Code schreibst.</p>
<p>Dir wurden viele Vorschläge genannt. Wenn du nicht selbst in der Lage bist, diese umzusetzen, können wir dir auch nicht helfen. Gerade pumuckl hat doch einige Ansätze erläutert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600818</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 18 Oct 2008 14:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 14:14:14 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a>: Dein Code klappt nicht. arr[i] liefert nun mal immer doubles...</p>
</blockquote>
<p>Der Code klappt und natürlich liefert er immer doubles <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="🙄"
    /></p>
<p>Guck dir mal dein Codestückchen an:</p>
<pre><code class="language-cpp">if(m_dataType == TYPE_FLOAT) {
   y = (static_cast&lt;FLOAT*&gt;(foo))[index] * scaleY;
} else if(m_dataType == TYPE_BYTE) {
   y = (static_cast&lt;BYTE*&gt;(foo))[index] * scaleY;
}
</code></pre>
<p>Da spielt es absolut keine Rolle, ob du Bytes einliest, das Byte mit scaleY multiplizierst und y zuweist, oder das Byte als double hast und dieselbe Rechnung durchführst. Und weil du dasselbe Ergebnis rausbekommst, nehmen sich die Lösungen nichts, außer dass die void*-Lösung durch den new-Overhead und Fragmentierung mehr Speicher verbraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600820</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 14:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 15:00:30 GMT]]></title><description><![CDATA[<p>[quote=&quot;Nexus&quot;]Dein Problem - hier stört es niemanden, wenn du unsauberen Code schreibst.<br />
1. Ist er nicht unsauber. Er ist die einfachste Lösung und wohl auch die effizienteste. Ich wollte nur wissen, ob es auch eine mehr C++igere Möglichkeit gibt.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Dir wurden viele Vorschläge genannt. Wenn du nicht selbst in der Lage bist, diese umzusetzen, können wir dir auch nicht helfen. Gerade pumuckl hat doch einige Ansätze erläutert.</p>
</blockquote>
<p>Vorschläge? Wo denn bitte? Alles was immer kam ist &quot;du beschreibst dein Problem zu ungenau&quot;. Gehts noch? Das Problem ist todessimpel und hinreichend erklärt. Und der Tipp von pumuckl ist auch nicht sehr hilfreich, denn im Grunde sagt er nur &quot;Factory Pattern&quot;. Kein konkretes Codeschnipsel, nichts. Der einzige konkrete Tipp ist es, dass ich (egal welche Datentyp es ist) die Daten immer in ein double array packe. Das wäre nicht nur schlecht sondern auch falsch. <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="🙄"
    /></p>
<p>Ansonsten danke für nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600846</guid><dc:creator><![CDATA[SucherDerEleganz]]></dc:creator><pubDate>Sat, 18 Oct 2008 15:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 15:17:45 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>die Daten immer in ein double array packe. Das wäre nicht nur schlecht sondern auch falsch.</p>
</blockquote>
<p>Das verstehe ich nicht - dann sag doch mal konkret, warum du es schlecht und falsch findest.</p>
<p>Stimmst du mir denn zu, dass du bei</p>
<pre><code class="language-cpp">BYTE ausgelesener_wert = ...;
y = ausgelesener_wert * sonstwas;
</code></pre>
<p>und</p>
<pre><code class="language-cpp">BYTE ausgelesener_wert = ...;
double als_double = static_cast&lt;double&gt;( ausgelesener_wert );
y = als_double * sonstwas;
</code></pre>
<p>das Selbe herausbekommst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600851</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 18 Oct 2008 15:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Geht das eleganter? on Sat, 18 Oct 2008 15:19:57 GMT]]></title><description><![CDATA[<p>SucherDerEleganz schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Dein Problem - hier stört es niemanden, wenn du unsauberen Code schreibst.</p>
</blockquote>
<p>1. Ist er nicht unsauber. Er ist die einfachste Lösung und wohl auch die effizienteste....</p>
</blockquote>
<p>Was hat den &quot;sauber&quot; (also geringe Fehleranfälligkeit bei Nutzung, Weiterentwicklung und wartung)<br />
mit &quot;einfach&quot; (was sich wohl eher an den Fähigkeiten des Programmierers orientiert)<br />
oder &quot;effizient&quot; (was eher mit Algorithmen, Volumina und Rechnerkapazitäten zu tun hat)<br />
zu tun ?</p>
<p>&quot;void*-Code&quot; (im Allgemeinen und Deiner auch) ist einfach fehleranfällig und sobald es sauberere Lösungen gibt (so wie hier), ist der Code einfach &quot;unsauber&quot;.<br />
Mag sein, dass Du ihn als &quot;einfach&quot; empfindest (anscheinend auch als &quot;einfacher&quot; als die saubereren Lösungen - vermutlich, weil Du sie und ihre Vorteile nicht durchschaust).<br />
Und dass er effizient ist, kann/will ich auch nicht beurteilen (dazu fehlen einfach Angaben) - aber &quot;sauber&quot; ist er einfach nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1600852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1600852</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 18 Oct 2008 15:19:57 GMT</pubDate></item></channel></rss>