<?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[viele ähnliche objekte]]></title><description><![CDATA[<p>hi</p>
<p>ich suche eine möglichkeit das zu machen:</p>
<pre><code class="language-cpp">template&lt;float mult&gt; //omg, wieso nicht erlaubt
class multiply
{
  operator float(float value) const{return value * mult;}
}
</code></pre>
<p>ich benötige ähnlich wie im beispiel viele typ die das selbe tun ausser dass ein flieskommawert anders ist. wie mach ich das? geht das mit vererbung irgendwie elegant? geht das?</p>
<pre><code class="language-cpp">class base
{
protected:
  virtual float get_factor() = 0;
public:
  operator float(float value) const{return value * this-&gt;get_factor;}
}
class derived : public base
{
  float get_factor(){return 1.5f}
}
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288835/viele-ähnliche-objekte</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 16:12:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288835.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Jun 2011 18:43:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:43:30 GMT]]></title><description><![CDATA[<p>hi</p>
<p>ich suche eine möglichkeit das zu machen:</p>
<pre><code class="language-cpp">template&lt;float mult&gt; //omg, wieso nicht erlaubt
class multiply
{
  operator float(float value) const{return value * mult;}
}
</code></pre>
<p>ich benötige ähnlich wie im beispiel viele typ die das selbe tun ausser dass ein flieskommawert anders ist. wie mach ich das? geht das mit vererbung irgendwie elegant? geht das?</p>
<pre><code class="language-cpp">class base
{
protected:
  virtual float get_factor() = 0;
public:
  operator float(float value) const{return value * this-&gt;get_factor;}
}
class derived : public base
{
  float get_factor(){return 1.5f}
}
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082810</guid><dc:creator><![CDATA[lol_of_lolcraft]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:51:43 GMT]]></title><description><![CDATA[<p>Was bitte soll den das sein:</p>
<pre><code class="language-cpp">operator float(float value) const{return value * mult;}
</code></pre>
<p>Ein Konvertierungsoperator der einen Parameter nimmt!? Wie genau soll der denn bitte verwendet werden!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082816</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:51:14 GMT]]></title><description><![CDATA[<p>Das Zweite geht nicht, dort wird die rein virtuelle Funktion der <code>base</code> aufgerufen und das ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082817</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:52:39 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Das Zweite geht nicht, dort wird die rein virtuelle Funktion der <code>base</code> aufgerufen und das ist falsch.</p>
</blockquote>
<p>Ne wird nicht, aber falsch ist es trotzdem weil der operator float dort keinen Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082819</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:53:22 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6496">@dot</a> ich meinte den expliziten op <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="😃"
    /> sorry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082821</guid><dc:creator><![CDATA[lol_of_lolcraft]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:56:36 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Ne wird nicht</p>
</blockquote>
<p>Ach ja, sorry! Das war, wenn <code>derived</code> den CTor von <code>base</code> aufruft und dann dieser Pure-Virtual-Funktionen aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082825</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 18:59:57 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Ach ja, sorry! Das war, wenn <code>derived</code> den CTor von <code>base</code> aufruft und dann dieser Pure-Virtual-Funktionen aufruft.</p>
</blockquote>
<p>Ja, in dem Fall würds in die Hose gehn weil das Objekt zu dem Zeitpunkt noch den Typ der Basisklasse hat da der abgeleitete Teil noch nicht fertig konstruiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082827</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 23 Jun 2011 18:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Thu, 23 Jun 2011 19:05:40 GMT]]></title><description><![CDATA[<p>@lol_of_lolcraft Als Template-Argument schon mal <code>const float&amp;</code> genutzt? Könnte helfen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2082833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2082833</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 23 Jun 2011 19:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Fri, 24 Jun 2011 08:29:28 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>@lol_of_lolcraft Als Template-Argument schon mal <code>const float&amp;</code> genutzt? Könnte helfen...</p>
</blockquote>
<p>Hast du ja selbst grade festgestellt, dass es nicht geht <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/2083044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083044</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 24 Jun 2011 08:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Fri, 24 Jun 2011 08:36:47 GMT]]></title><description><![CDATA[<p>lol_of_lolcraft schrieb:</p>
<blockquote>
<p>ich suche eine möglichkeit das zu machen</p>
</blockquote>
<p>Den <code>float</code> -Parameter im Konstruktor des Funktors anzugeben ist dir zu kompliziert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083051</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Jun 2011 08:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Sat, 25 Jun 2011 02:17:57 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>@lol_of_lolcraft Als Template-Argument schon mal <code>const float&amp;</code> genutzt? Könnte helfen...</p>
</blockquote>
<p>Hast du ja selbst grade festgestellt, dass es nicht geht <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>Wieso sollte das nicht gehen?<br />
Es ist nur bäh, weil der float-Wert dann nichtmehr Compiletime-Konstant ist, und dadurch Berechnungen mit dem Wert u.U. nicht optimiert werden können.</p>
<p>Und instanzieren muss man dann natürlich anders, da man halt eine Lvalue braucht wenn daraus ein (Lvalue-)Referenz-Template-Parameter werden soll. D.h. man kann nichtmehr einfach nen Float-Literal hinschreiben, sondern muss das Ding irgendwo als Konstante definieren, und dann den Namen der Konstante verwenden.</p>
<p>Siehe: <a href="http://www.c-plusplus.net/forum/p2083651#2083651" rel="nofollow">http://www.c-plusplus.net/forum/p2083651#2083651</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083650</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 25 Jun 2011 02:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Sat, 25 Jun 2011 09:44:31 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und instanzieren muss man dann natürlich anders, da man halt eine Lvalue braucht wenn daraus ein (Lvalue-)Referenz-Template-Parameter werden soll. D.h. man kann nichtmehr einfach nen Float-Literal hinschreiben, sondern muss das Ding irgendwo als Konstante definieren, und dann den Namen der Konstante verwenden.</p>
</blockquote>
<p>Das ist eigentlich inkonsistent. Normalerweise kann man Referenzen auf <code>const</code> auch mit temporären Ausdrücken initialisieren.</p>
<pre><code class="language-cpp">const float&amp; f = 4.2f;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2083695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083695</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 25 Jun 2011 09:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Sat, 25 Jun 2011 10:34:21 GMT]]></title><description><![CDATA[<p>Alternative 1:</p>
<p>Statt &quot;viele ähnliche Klassen&quot; zu benutzten, reicht auch eine einzige, die den float-Wert speichert.</p>
<p>Alternative 2:</p>
<p>Es werden nun einmal keine Fließkommawerte als Template-Parameter unterstützt. Ich schätze, das wirft einfach zu viele Probleme auf bzgl Rechenungenauigkeiten. Du kannst aber Referenzen auf Objekte mit externer Bindung als Template-Parameter verwenden:</p>
<pre><code class="language-cpp">extern const float magic = 9.87654321f;

template&lt;const float&amp; CF&gt;
struct foo {
  float operator()(float x) {return x*CF;}
};

foo&lt;magic&gt; f;
</code></pre>
<p>Alternative 3:</p>
<p>Und falls Du Makros und Lambdas verwenden darfst/kannst:</p>
<pre><code class="language-cpp">#define MUL(f) [](float x){return x*f;}
auto mul_e  = MUL(2.71828183f);
auto mul_pi = MUL(3.14159265f);
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2083718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083718</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 25 Jun 2011 10:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Sat, 25 Jun 2011 13:34:05 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und instanzieren muss man dann natürlich anders, da man halt eine Lvalue braucht wenn daraus ein (Lvalue-)Referenz-Template-Parameter werden soll. D.h. man kann nichtmehr einfach nen Float-Literal hinschreiben, sondern muss das Ding irgendwo als Konstante definieren, und dann den Namen der Konstante verwenden.</p>
</blockquote>
<p>Das ist eigentlich inkonsistent. Normalerweise kann man Referenzen auf <code>const</code> auch mit temporären Ausdrücken initialisieren.</p>
<pre><code class="language-cpp">const float&amp; f = 4.2f;
</code></pre>
</blockquote>
<p>Selbst wenn es erlaubt wäre, würde das bei const-ref Template Parametern keinen Sinn machen.<br />
Das float an das die Referenz gebunden wird wäre bei jeder Instanzierung des Templates ein anderes, d.h. es gäbe viele verschiedene Template-Instanzen, obwohl der Wert in der float Konstante jedesmal gleich wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083818</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 25 Jun 2011 13:34:05 GMT</pubDate></item><item><title><![CDATA[Reply to viele ähnliche objekte on Sat, 25 Jun 2011 17:20:48 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Alternative 3:</p>
<p>Und falls Du Makros und Lambdas verwenden darfst/kannst:</p>
<pre><code class="language-cpp">#define MUL(f) [](float x){return x*f;}
auto mul_e  = MUL(2.71828183f);
auto mul_pi = MUL(3.14159265f);
...
</code></pre>
</blockquote>
<p>was ist hier der Vorteil gegenueber:</p>
<pre><code class="language-cpp">float MUL(float x) { return x*f; }
auto mul_e  = MUL(2.71828183f);
auto mul_pi = MUL(3.14159265f);
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083972</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 25 Jun 2011 17:20:48 GMT</pubDate></item></channel></rss>