<?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[Eleganter als überladen?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe den Fall das ich in einer Prozedur eine Bestimmte<br />
Anzahl an Parametern erwarte. Diese können double oder ein pointer sein.<br />
Klassisch würde man das Problem mit überladen handeln, allerdings sind das<br />
bei 3 Parametern schon 8 Prozeduren.<br />
ich muss natürlich auch wissen ob der Parameter nu ein double oder pointer ist.<br />
Gibt es dort einen besseren Weg? evtl. Templates? Allerdings fällt mir da für meinen Fall auch keine Lösung ein.</p>
<p>mfg<br />
Noxi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261911/eleganter-als-überladen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 00:48:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261911.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Feb 2010 13:15:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:15:07 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe den Fall das ich in einer Prozedur eine Bestimmte<br />
Anzahl an Parametern erwarte. Diese können double oder ein pointer sein.<br />
Klassisch würde man das Problem mit überladen handeln, allerdings sind das<br />
bei 3 Parametern schon 8 Prozeduren.<br />
ich muss natürlich auch wissen ob der Parameter nu ein double oder pointer ist.<br />
Gibt es dort einen besseren Weg? evtl. Templates? Allerdings fällt mir da für meinen Fall auch keine Lösung ein.</p>
<p>mfg<br />
Noxi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861207</guid><dc:creator><![CDATA[Noxi]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:15:07 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:20:17 GMT]]></title><description><![CDATA[<p>sehe ich das richtig dass du drei Parameter hast, die alle sowohl doubles als auch Pointer sein können?<br />
Wie kompliziert das wird hängt davon ab was du in Abhängigkeit von den untershiedlichen Typen machen willst. Skizziere mal bitte. Vielleicht gibts ja auch noch ne ganz andere Möglichkeit an die du noch nicht gedacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861217</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:21:01 GMT]]></title><description><![CDATA[<p>Du meinst, jeder Parameter kann entweder <code>double</code> oder ein Zeiger sein? Eine Möglichkeit wüsste ich gerade, allerdings würde ich gerne Genaueres über die Funktion erfahren, da es vielleicht bessere Alternativen gibt. Was soll die Funktion tun bzw. inwiefern können wahlweise Zeiger und <code>double</code> übergeben werden? Worauf zeigen die Zeiger? Sorry für meine Neugier... <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/1861218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861218</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:24:55 GMT]]></title><description><![CDATA[<p>Wie wäre es denn, wenn du in jedem Fall einen Pointer übergibst, solwie drei Varibalen, die dir sagen ob der Pointer jetzt als Pointer auf die eigentlich gewollte double oder wirklich als Pointer gemeint ist. So in die Richtung:</p>
<pre><code class="language-cpp">void function(double *p1, double *p2, double *p3, int i1, int i2, int i3){
    if(int i1=1){//(*p1) ist als double zu interpretieren
    }else{//p1 ist pointer
    }
    ...
    //and so on
}
</code></pre>
<p>Das als allgemeinen Lösungsansatz...<br />
Natürlich könnte es fallspezifisch auch noch eine einfachere, besser Lösung geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861224</guid><dc:creator><![CDATA[ichben]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:26:21 GMT]]></title><description><![CDATA[<p>ichben schrieb:</p>
<blockquote>
<p>Wie wäre es denn, wenn du in jedem Fall einen Pointer übergibst, solwie drei Varibalen, die dir sagen ob der Pointer jetzt als Pointer auf die eigentlich gewollte double oder wirklich als Pointer gemeint ist. So in die Richtung:</p>
<pre><code class="language-cpp">void function(double *p1, double *p2, double *p3, int i1, int i2, int i3){
    if(int i1=1){//p1 ist double
    }else{//p1 ist pointer
    }
    ...
    //and so on
}
</code></pre>
<p>Das als allgemeinen Lösungsansatz...<br />
Natürlich könnte es fallspezifisch auch noch eine einfachere, besser Lösung geben.</p>
</blockquote>
<p>&quot;and so on&quot; - genau. Man branched dann unnötig rum <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/1861226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861226</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:26:21 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:27:30 GMT]]></title><description><![CDATA[<p>Ich denke boost::variant könnte das Problem halbwegs ellegant lösen, natürlich jenachdem was OP mit den Parametern vorhat.<br />
Siehe dazu <a href="http://www.boost.org/doc/libs/1_35_0/doc/html/variant/tutorial.html" rel="nofollow">http://www.boost.org/doc/libs/1_35_0/doc/html/variant/tutorial.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861228</guid><dc:creator><![CDATA[crt32]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:28:41 GMT]]></title><description><![CDATA[<p>Also, diese Funktion ist eine Initialisierung für ein Objekt.</p>
<p>Als Beispiel:</p>
<pre><code>void init(double Param1; double Param2, etc ....) {
    _P1* = Param1;
    _p2* = Param2;
    ...
    }
</code></pre>
<p>Nun möchte ich aber statt dem Wert einen Zeiger auf den Wert übergeben,<br />
da der Entsprechende Wert sich zur Laufzeit ändern kann.</p>
<pre><code>void (double Param1; double *pParam2,etc ....) {
_P1* = Param1;
P2 = pParam2;
...
}
</code></pre>
<p>In der Funktion müsste ich natürlich unterscheiden können ob es ein Zeiger ist, oder nicht.<br />
Ich weiß, ist etwas wirr... aber ich hoffe trotzdem verständlich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861231</guid><dc:creator><![CDATA[Noxi]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:34:03 GMT]]></title><description><![CDATA[<p>Also ich verstehe dein Problem nicht so ganz verstanden bis jetzt. Das du irgendwelche Überladungen durch ein Template gerne vermeiden möchtest habe ich soweit kapiert. Aber nicht was du in der Funktion machen möchtest.</p>
<p>Z.B. was sind den _P1, P2, _p2 für Variablen? Und woher kommen die?</p>
<p>Da fehlt zu viel Kontext um einen guten Lösungsvorschlag anbieten zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861238</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:38:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">double get_value(double d) { return d; }
double get_value(double* p) { return *p; }

template&lt;typename A, typename B, typename C&gt;
void func(A a, B b, C c) {
  double my_a = get_value(a);
  double my_b = get_value(b);
  double my_c = get_value(c);
}
</code></pre>
<p>Riecht aber wie eine Designkatastrophe...</p>
<p>PS:<br />
was bedeutet &quot;zur laufzeit sich ändern kann&quot;?<br />
Du wirst doch wohl keine unsynchroniserten multithreaded zugriffe machen wollen? Und wenn du das nicht willst, dann ist die Aussage etwas zweifelhaft...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861240</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:38:43 GMT]]></title><description><![CDATA[<p>weiße, schwarze oder bunte Pointer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861241</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:42:58 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<p>Also ich verstehe dein Problem nicht so ganz verstanden bis jetzt. Das du irgendwelche Überladungen durch ein Template gerne vermeiden möchtest habe ich soweit kapiert. Aber nicht was du in der Funktion machen möchtest.</p>
<p>Z.B. was sind den _P1, P2, _p2 für Variablen? Und woher kommen die?</p>
<p>Da fehlt zu viel Kontext um einen guten Lösungsvorschlag anbieten zu können.</p>
</blockquote>
<p>Sorry, die Dinger mit &quot;_&quot; sind private-Variablen der Klasse die mit dem Init initialisiert werden sollen.<br />
Zur Laufzeit macht eine periodisch aufgerufene Funktion der Klasse mit den Variablen irgentwas. Nu ist es aber so, das eineige Werte nicht &quot;fest&quot; bleiben, sondern sich laufen ändern. Um nicht jeder der X. Klassen wieder neu initilisieren zu müssen, dachte ich ich übergebe &quot;wahlweise&quot; einen Pointer auf eine Variable. so muss ich den Wert nur einmal ändern. Welcher Wert das aber im Einzelfall ist (der sich dynamisch ändern kann) weiss ich aber nur zur Laufzeit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861246</guid><dc:creator><![CDATA[Noxi]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:42:58 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:43:16 GMT]]></title><description><![CDATA[<p>sowas?</p>
<pre><code class="language-cpp">struct proxy
{
    double value;
    double* where;
    proxy(double value) : value(value), where(&amp;this-&gt;value) {}
    proxy(double* where) : value(), where(where) {}
    proxy(const proxy&amp; other) : value(other.value), where(other.where==&amp;other.value?&amp;this-&gt;value:other.where) {}
    proxy&amp; operator=(double v) { *where = v; return *this; }
    operator double&amp;() const { return *where; }
private:
    void operator=(proxy&amp;) const;
};

void init(proxy Param1; proxy Param2, etc ....).
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1861248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861248</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:44:43 GMT]]></title><description><![CDATA[<p>Noxi schrieb:</p>
<blockquote>
<p>Also, diese Funktion ist eine Initialisierung für ein Objekt.</p>
<p>Als Beispiel:</p>
<pre><code>void init(double Param1; double Param2, etc ....) {
    _P1* = Param1;
    _p2* = Param2;
    ...
    }
</code></pre>
</blockquote>
<p>Objekte initialisiert man mit dem Konstruktor. Shade of Mine hat recht, das riecht arg nach Designkatastrophe.</p>
<p>Also hole mal bitte etwas weiter aus und erzähle uns was vom Kontext, vermutlich lässt sich dein Problem viel einfacher (und völlig anders) lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861250</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 13:45:25 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>[cpp]<br />
PS:<br />
was bedeutet &quot;zur laufzeit sich ändern kann&quot;?</p>
</blockquote>
<p>Ich meine z.B. Messwerte <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/1861251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861251</guid><dc:creator><![CDATA[Noxi]]></dc:creator><pubDate>Thu, 25 Feb 2010 13:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Eleganter als überladen? on Thu, 25 Feb 2010 14:01:06 GMT]]></title><description><![CDATA[<p>Ok...ich hole aus...</p>
<p>Also ich habe ein Sammelsurium an Klassen gleichen Basistyps in einer Liste , welche aneinandergereiht einen Ablauf ergeben. Erzeugt wird diese Liste dynamisch aus einem Script.</p>
<p>In dem Script aus dem der Ablauf erzeugt wird stehen neben den entsprechenen Werten auch &quot;Variablen&quot; welche im Laufe der Abarbeitung Ihren Wert ändern können.</p>
<p>z.B.</p>
<p>aKlasse setzt einen Digitalen Ausgang<br />
bKlasse wartet 10 sekunden<br />
cKlasse Liest einen messwert.<br />
bKlasse wartet 10 sekunden<br />
cKlasse Liest einen messwert.<br />
cKlasse Liest einen messwert.</p>
<p>mit dem Init sagen ich z.B. der a Klasse welchen Ausgang sie mit welchem Wert beschreiben soll, wenn sie an der Reihe ist...</p>
<p>diese klassen werden in schleifen auch mehrfach aufgerufen.</p>
<p>Nun kann es aber sein, das ich zum Zeitpunkt des Erzeugen des &quot;Ablaufes&quot; noch nicht weiss welcher Ausgang (Variable) das ist. Darum &quot;wollte&quot; ich der Klassen einen Pointer auf den Typ übergeben der dieses Information enhält, anstatt den Wert selbst. Ob das nun ein bitset oder int oder sonstwas ist.</p>
<p>Ich hoffe es lichtet sich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1861269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1861269</guid><dc:creator><![CDATA[Noxi]]></dc:creator><pubDate>Thu, 25 Feb 2010 14:01:06 GMT</pubDate></item></channel></rss>