<?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[Gibt es sowas wie &amp;lt;?&amp;gt; unter C++?]]></title><description><![CDATA[<p>Servus,</p>
<p>einige Java-Programmierer kennen sicherlich das &lt;?&gt;-Konstrukt, um quasi zu sagen, dass einem die Typparameter wurscht sind. Gibt es sowas auch unter C++?</p>
<p>Anwendungsbeispiel:<br />
Ich habe ein Template fuer eine Polygon-Klasse definiert, wo man einen int-Wert angeben kann. Anhand dieses Werts wird dann ein Array von Punkten festgelegt. Nun moechte ich aber von manchen Funktionen aus ein Polygon beliebiger Groesse zurueckgeben, allerdings darf ich dann nicht einfach Polygon* als Rueckgabewert angeben, sondern muss auch hier eine Groesse angeben.</p>
<p>(Mir ist klar, dass ich das auch ohne Templates hinkriegen koennte, aber dann muesste ich das Array im Konstruktor initialisieren, was ich nicht moechte.)</p>
<p>Geht das irgendwie? Oder kann ich das sofort vergessen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243855/gibt-es-sowas-wie-lt-gt-unter-c</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 15:51:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243855.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jun 2009 08:28:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:28:42 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>einige Java-Programmierer kennen sicherlich das &lt;?&gt;-Konstrukt, um quasi zu sagen, dass einem die Typparameter wurscht sind. Gibt es sowas auch unter C++?</p>
<p>Anwendungsbeispiel:<br />
Ich habe ein Template fuer eine Polygon-Klasse definiert, wo man einen int-Wert angeben kann. Anhand dieses Werts wird dann ein Array von Punkten festgelegt. Nun moechte ich aber von manchen Funktionen aus ein Polygon beliebiger Groesse zurueckgeben, allerdings darf ich dann nicht einfach Polygon* als Rueckgabewert angeben, sondern muss auch hier eine Groesse angeben.</p>
<p>(Mir ist klar, dass ich das auch ohne Templates hinkriegen koennte, aber dann muesste ich das Array im Konstruktor initialisieren, was ich nicht moechte.)</p>
<p>Geht das irgendwie? Oder kann ich das sofort vergessen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730846</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:38:47 GMT]]></title><description><![CDATA[<p>Templates greifen zur Compileziet, sind also fuer statische Angelegenheiten zustaendig. Die Anzahl der Punkte in deinem Polygon ist dynamisch. Daraus folgt: Templates sind nicht geeignet fuer Polygone mit variabler Punktzahl.</p>
<blockquote>
<p>ist klar, dass ich das auch ohne Templates hinkriegen koennte, aber dann muesste ich das Array im Konstruktor initialisieren, was ich nicht moechte</p>
</blockquote>
<p>Au weiha, und vielleicht sowas wie std::vector oder std::list benutzen. Mal ehrlich, warum moechtest du das nicht?</p>
<blockquote>
<p>Geht das irgendwie?</p>
</blockquote>
<p>Es geht irgendwie. Aber void* ist nicht die Loesung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730850</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:39:01 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>(Mir ist klar, dass ich das auch ohne Templates hinkriegen koennte, aber dann muesste ich das Array im Konstruktor initialisieren, was ich nicht moechte.)</p>
<p>Geht das irgendwie? Oder kann ich das sofort vergessen?</p>
</blockquote>
<p>Du hast dir die frage doch schon selber beantwortet - mit Templates ist das machbar. Warum du die Initilaisierung im Konstruktor nicht <em>möchtest</em> ist schleierhaft. Aus Geschmacksgründen auf eine unübliche/unbekannte Methode auszuweichen ist meist eine Fehlentscheidung.</p>
<p>Im Übrigen ist C++ eben nicht Java, sondern hat seine eigenen Programmierparadigmen. Also sollte man auch nicht versuchen etwas &quot;so wie in Java&quot; zu realisieren.</p>
<p>Wenn du uns das eigentliche Problem schilderst (ggf. mit Code) und nicht die Methode, mit der du das Problem lösen willst, dann kann dir eventuell besser geholfen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730851</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:45:35 GMT]]></title><description><![CDATA[<p>Ich moechte kein new im Konstruktor haben, damit die Werte moeglichst auf dem Stack abgelegt werden. Im Moment habe ich die new-Version und das ist einfach zu langsam (da extrem viele dieser Polygone instanziiert werden).</p>
<p>Der Grund warum ich nun auf die Template-Loesung will ist der folgende: Von Polygon habe ich eine Klasse namens Quad abgeleitet, und dieses ruft einfach den Polygon-Konstruktor mit dem int-Parameter 4 auf. Also wird die Groesse auf 4 gesetzt und ein Array in dieser Groesse erstellt. Nun wollte ich das wie gesagt aendern, um nicht mehr so viele news zu haben, und habe zwei Moeglichkeiten: Entweder ich leite Quad nicht mehr von Polygon ab, sondern vielleicht beide Klassen von einem gemeinsamen Interface, oder ich leite Quad von Polygon ab, aber verwende ein Template fuer Polygon, wo die Groesse direkt mitgegeben wird.</p>
<blockquote>
<p>Im Übrigen ist C++ eben nicht Java, sondern hat seine eigenen Programmierparadigmen. Also sollte man auch nicht versuchen etwas &quot;so wie in Java&quot; zu realisieren.</p>
</blockquote>
<p>In Java geht es nichtmal, Zahlen als Template-Argumente zu verwenden, also habe ich auch nicht vor, es &quot;so wie in Java&quot; zu machen. Ich weiss nur dass man in Java generalisieren kann, indem man statt eindeutiger Template-Argumente ein Fragezeichen angibt, und meine Frage war nur, ob es eine vergleichbare Moeglichkeit auch in C++ gibt.</p>
<p>EDIT: Ich vergass zu erwaehnen, dass gerade die Quads wie bloed instanziiert werden. Genau DORT ist es mir zu langsam. Aber ich faend es halt nach wie vor huebsch, wenn Quad von Polygon abgeleitet waere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730853</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:45:35 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:51:21 GMT]]></title><description><![CDATA[<p>Du kannst eine Interface IPolygon definieren, von dem Quad erbt und die entsprechenden Methoden implementiert. Dabei ist die Arraygroesse der Punkte fest a la Point3D points[4]. Andere Moeglichkeiten: eigene Speicherverwaltung, Nachnutzung von Objekten aus einem Pool, ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730858</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 08:56:18 GMT]]></title><description><![CDATA[<blockquote>
<p>Von Polygon habe ich eine Klasse namens Quad abgeleitet</p>
</blockquote>
<p>Welche Funktionalitaet hat denn &quot;Quad&quot; die &quot;Polygon&quot; nicht schon beinhaltet?</p>
<blockquote>
<p>da extrem viele dieser Polygone instanziiert werden</p>
</blockquote>
<p>Haeufig haben unterschiedliche Polygone gemeinsame Eckpunkte sodass auch ein gemeinsamer Pool von Eckpunkten Sinn macht und eine Allozierung pro Element entfaellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730861</guid><dc:creator><![CDATA[hellihjb]]></dc:creator><pubDate>Mon, 22 Jun 2009 08:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 09:07:57 GMT]]></title><description><![CDATA[<p>Quad ist in dem Fall eher als eine Art typedef anzusehen und ruft bisher einfach nur Polygon(4) auf. Zudem kann ich z.B. bei Vergleichsoperatoren einfach alle 4 Punkte vergleichen, ohne eine Schleife zu machen (wie es bei einem beliebig grossen Polygon der Fall waere).</p>
<p>Das mit den gemeinsamen Eckpunkten kommt in meinem Anwendungsfall kaum vor, da handelt es sich eher um Polygone, die sich ueberlappen.</p>
<p>EDIT: Uebrigens werden auch die anderen Polygone spaeter nie in ihrer Groesse veraendert, daher waere das mit Templates halt schon praktisch. Was mich gerade wundert: ich kann in der Quad-Klasse das points-Array einfach nochmal neu definieren, aber was laeuft dann eigentlich ab, wenn die Polygon-Methoden aufgerufen werden? Ist das dann einfach in Polygon::points und Quad::points unterteilt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730867</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 09:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 09:29:16 GMT]]></title><description><![CDATA[<p>Generics != Templates</p>
<p>Die Syntax mit den &lt;&gt;-Klammern ist zwar gleich, aber es passiert doch letztendlich was anderes. Generics werden zwar vom Compiler überprüft, aber der erzeugte Code ist wieder die <code>java.lang.Object</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730876</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 22 Jun 2009 09:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 10:11:13 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>Servus,<br />
einige Java-Programmierer kennen sicherlich das &lt;?&gt;-Konstrukt, um quasi zu sagen, dass einem die Typparameter wurscht sind.</p>
<p>Gibt es sowas auch unter C++?</p>
</blockquote>
<p>Nein. &quot;Java Generics&quot; ist etwas völlig anderes. Die Typparameter einer generischen Klasse gehören nicht wirklich zum Typ der Klasse (&quot;Type Erasure&quot;). Sie werden nur dazu benutzt, zur Compilezeit etwas mehr Typechecking durchzuführen und dem Nutzer das Typecasting abzunehmen. Das ganze funktioniert wirklich nur wegen der Indirektion (Objekte kann man nie &quot;direkt halten&quot; sondern nur über Referenzen erreichen) und über Laufzeitpolymorphie.</p>
<p>In C++ könnte man das so machen:</p>
<pre><code class="language-cpp">class abstraktes_poly {
  public:
    virtual ~abstraktes_poly() {}
    virtual abstraktes_poly* clone() const = 0;
    virtual int ecken() const = 0;
    virtual punkt ecke(int index) const = 0;
  };

  template&lt;int Ecken&gt;
  class konkretes_poly : public abstraktes_poly {
    punkt m_ecken[Ecken];
  public:
    ...Füge Code für Initialisierung ein...
    konkretes_poly&lt;Ecken&gt;* clone() const {return new poly&lt;Ecken&gt;(*this);}
    int ecken() const {return Ecken;}
    punkt ecke(int index) const {return m_ecken[index];}
  }

  int main() {
    auto_ptr&lt;abstraktes_poly&gt; apap1 ( new konkretes_poly&lt;4&gt; );
    auto_ptr&lt;abstraktes_poly&gt; apap2 ( new konkretes_poly&lt;5&gt; );
    cout &lt;&lt; apap1-&gt;ecken();
    cout &lt;&lt; apap2-&gt;ecken();
  }
</code></pre>
<p>Statt auto_ptr kann man diese Zeiger natürlich auch in einem Objekt einer eigens dafür geschriebenen Klasse verwalten. Dadurch kann man auch Wert-Semantik emulieren. Das ganze nennt sich dann auch &quot;C++ Type Erasure&quot; und wird u.a. bei <a href="http://www.boost.org/doc/libs/1_39_0/doc/html/function.html" rel="nofollow">Boost.Function</a> und <a href="http://www.boost.org/doc/libs/1_39_0/doc/html/any.html" rel="nofollow">Boost.Any</a> angewendet.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730894</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 22 Jun 2009 10:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:05:21 GMT]]></title><description><![CDATA[<p>Hallo Rock Lobster,</p>
<p>Rock Lobster schrieb:</p>
<blockquote>
<p>Ich moechte kein new im Konstruktor haben, damit die Werte moeglichst auf dem Stack abgelegt werden. Im Moment habe ich die new-Version und das ist einfach zu langsam (da extrem viele dieser Polygone instanziiert werden).</p>
</blockquote>
<p>Ich frage mich gerade wie du so viele Objekte auf dem Stack ablegst.<br />
(Rekursion schliesse ich einfach mal aus)<br />
Wo verwaltest du denn die ganzen Polygone? Kurz gesagt, ich befürchte dass<br />
du entweder jedesmal den Copy-Konstruktor aufrufst oder auf identische<br />
Speicherbereiche verweist.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730916</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:13:19 GMT]]></title><description><![CDATA[<p>Also in einer wichtigen Initialisierungsroutine am Anfang des Programms wird erstmal ein Haufen Quads in einen std::vector gespeichert (und zwar direkt als Objekt, nicht als Pointer). Da waere es jetzt halt unguenstig, wenn pro Quad im Konstruktor ein new aufgerufen wird, da das ja den gesamten Vorgang sehr ausbremsen kann. Also ist es mir lieber, wenn die Arrays von vorneherein initialisiert werden.</p>
<p>Ich werde nun aber ueberlegen ob ich Polygon und Quad nicht einfach getrennt als Klasse haben soll. Die Anzahl der Methoden und Operatoren haelt sich sehr stark in Grenzen, und es ist wahrscheinlich auch nicht notwendig, dass sie ineinander gecasted werden muessen, von daher ist es vielleicht wirklich die sinnvollste Loesung, einfach zwei unterschiedliche Klassen zu verwenden. Das urspruengliche Design ging halt von schoenem OOP aus, aber jetzt ist die Geschwindigkeit deutlich wichtiger als das Klassendesign.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730924</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:18:53 GMT]]></title><description><![CDATA[<blockquote>
<p>am Anfang des Programms ... im Konstruktor ein new aufgerufen wird, da das ja den gesamten Vorgang sehr ausbremsen kann</p>
</blockquote>
<p>Omg. Das passiert am Anfang und nur ein Mal. D.h. es spielt fuer das restliche Programm keine Rolle? Und dieser Konjunktiv stoert mich. Hast du man getestet und nachgemessen, ob es ueberhaupt ein Performanceloch ist?</p>
<blockquote>
<p>ueberlegen ob ich Polygon und Quad nicht einfach getrennt</p>
</blockquote>
<p>Haeh, hast du dir die Posts nicht durchgelesen. Du kannst OOP und Geschwindigkeit haben. Warum stellst du erst die Frage und machst es dann doch ganz anders. Beratungsresistent ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730928</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:22:50 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>...Nun moechte ich aber von manchen Funktionen aus ein Polygon beliebiger Groesse zurueckgeben, ...</p>
</blockquote>
<p>Warum nicht wieder ein Funktionstemplate? Dann muss allerdings der Aufrufer die Dimension schon wissen (und sei es nur implizit).</p>
<pre><code class="language-cpp">template &lt;int DIM&gt;
Polygon&lt;DIM&gt;* f(Polygon&lt;DIM&gt; const&amp; dummy);

template &lt;int DIM&gt;
Polygon&lt;DIM&gt;* f(int DIM) { return f(Polygon&lt;DIM&gt;); }
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730931</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:27:30 GMT]]></title><description><![CDATA[<p>Ich haette vielleicht nicht &quot;Programm&quot; sondern &quot;Vorgang&quot; sagen sollen. Dieser Vorgang dauert im ersten Schritt sehr lang, es kommen danach noch ein paar Schritte die weniger lange dauern. Und der Vorgang kommt in meinem jetzigen &quot;Programm&quot; nur einmal vor, aber spaeter soll er immer wieder vorkommen koennen.</p>
<p>Nachgemessen habe ich auch. Es kommen Daten uebers Netzwerk, und die CPU ist auf Voll-Last, das Netzwerk aber nicht. Also ist wohl davon auszugehen, dass in meinem Code zu viel passiert, und aus diesem Grund waere es sinnvoll, dort ein paar Dinge zu aendern. Da nun in jedem einzelnen Quad-Konstruktor jedoch ein unnoetiges &quot;new&quot; gemacht wird, waere das zumindest mal ein erster Anhaltspunkt.</p>
<p>Ich habe mich gerade mit einem Kollegen unterhalten und ihm auch die Version mit der gemeinsamen IPolygon-Basisklasse vorgeschlagen (hatte sogar schon angefangen zu implementieren), er meinte jedoch, ich soll auf OOP in dem Fall verzichten, weil durch virtuelle Funktionen auch wieder unnoetig Overhead entsteht, der bei solch einer simplen Extrem-Basis-Klasse wie es ein Quad nunmal ist einfach nicht sein muss. Das war der Grund, warum ich sagte, dass ich nun wohl doch lieber eine voellig eigene, OOP-freie Implementierung einer Quad-Klasse bevorzugen wuerde. Hat aber nix mit beratungsresistent zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730937</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:29:09 GMT]]></title><description><![CDATA[<p>@ Simon2: Vielen Dank, auf diese Idee bin ich bisher nicht gekommen. Jedoch denke ich, dass auch das in meinem Anwendungsfall nicht sinnvoll sein wird (da man vorher nicht weiss, wie viele Punkte das Polygon dann haben wird). Mir ist nun auch klar warum das mit Templates nicht funktionieren kann. Trotzdem danke fuer den Hinweis, vielleicht kann ich das mal an einer anderen Stelle gut gebrauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730938</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:44:23 GMT]]></title><description><![CDATA[<blockquote>
<p>CPU ... Volllast ... Netzwerk nicht ... erster Anhaltspunkt ...</p>
</blockquote>
<p>Mit Nachmessen meine ich eine Profiler zu benutzen und genau zu schauen, wo viel Rechenleistung verbraten wird und nicht aufs geradewohl irgendwas zu optimieren.</p>
<blockquote>
<p>Quad-Konstruktor jedoch ein unnoetiges &quot;new&quot;</p>
</blockquote>
<p>Und es wurde gezeigt, wie das zu beheben ist, mit OOP. Ausserdem waere dann ein Objektpool wahrscheinlich angebrachter.</p>
<blockquote>
<p>ich soll auf OOP in dem Fall verzichten, weil durch virtuelle Funktionen auch wieder unnoetig Overhead entsteht</p>
</blockquote>
<p>in jedem Fall ... Hast du ihn auch gefragt, aus was der Overhead besteht und wieviel Zeit er kosten wird? Es ist eine zusaetzlich Dereferenzierung eines Zeigers. Also verdammt billig.</p>
<p>Ich empfehle dir die Buecher von Scott Meyers: &quot;Effektiv C++ programmieren&quot; und &quot;Mehr effektiv C++ programmieren&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730941</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:44:23 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 11:48:58 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;int DIM&gt;
Polygon&lt;DIM&gt;* f(Polygon&lt;DIM&gt; const&amp; dummy);

template &lt;int DIM&gt;
Polygon&lt;DIM&gt;* f(int DIM) { return f(Polygon&lt;DIM&gt;); }
</code></pre>
</blockquote>
<p>Ich bezweifle dass das funktioniert, denn erstens hast du für zwei verschiedene Identifyer denselben Bezeichner gewählt (einmal den Templateparameter, einmal den Funktionsparameter), zweitens wird erst zur Laufzeit entschieden, welches Argument der Funktion übergeben wird, der Templateparameter muss aber schon zur Laufzeit feststehen.<br />
Das Ganze müsste daher eher mit einer Art Int2Type als Funktionsargument geschehen:</p>
<pre><code class="language-cpp">template &lt;int DIM&gt;
Polygon&lt;DIM&gt;* f(Int2Type&lt;DIM&gt; /*dummy*/);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1730944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730944</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 22 Jun 2009 11:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 13:14:55 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...Ich bezweifle dass das funktioniert, ...</p>
</blockquote>
<p>Sollte auch eher eine Ideenskizze sein (hätte ich wohl besser hingeschrieben).<br />
Außerdem war die Idee zur 2. Funktion eher ein &quot;Spontanblitz&quot; .... was wohl (wie so oft) unter die Kategorie &quot;Der Erste aber nicht der Beste&quot; fällt <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>Deine Kritikpunkte zielen im Wesentlichen auf mein zweites template ab, oder?...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730994</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Jun 2009 13:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 13:17:22 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>...die CPU ist auf Voll-Last...</p>
</blockquote>
<p>Das ist an sich ein gutes Zeichen.<br />
Die Frage ist eher, ob der Prozess insgesamt zu lange dauert ... und ob Deine ergriffenen Maßnahmen helfen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730997</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Jun 2009 13:17:22 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 14:34:02 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Deine Kritikpunkte zielen im Wesentlichen auf mein zweites template ab, oder?...</p>
</blockquote>
<p>Jup.</p>
<p>@Rock: wie schon gesagt wurde, und wie du auch richtig erkannt hast gibts zwei Möglichkeiten: die &quot;Größe&quot; (= Zahl der Ecken) jedes Polygons zur Compilezeit festlegen -&gt; alles mit Templates, oder zur Laufzeit -&gt; keine Templates, dafür dynamische Speicherverwaltung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731057</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 22 Jun 2009 14:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 14:44:29 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...zwei Möglichkeiten: die &quot;Größe&quot; (= Zahl der Ecken) jedes Polygons zur Compilezeit festlegen -&gt; alles mit Templates, oder zur Laufzeit -&gt; keine Templates, dafür dynamische Speicherverwaltung.</p>
</blockquote>
<p>Plus die &quot;Frickellösungen&quot; (die bisweilen tatsächlich optimal sein können); z.B.:<br />
- eigene Speicherverwaltung<br />
- &quot;feste templates&quot;</p>
<p>(Ideenskizze !!!)</p>
<pre><code class="language-cpp">template &lt;int DIM&gt; struct Polygon { };

template &lt;typename T&gt; T f(T const&amp; dummy){ ... }

int main() {
//...
   if(irgendeinKriterium) {
      vector&lt;Polygon&lt;4&gt; &gt; myPolys(1000);
      myPoly[2] = f(myPoly[0]);
   }
   else {
      vector&lt;Polygon&lt;16&gt; &gt; myPolys(1000);
      myPoly[2] = f(myPoly[0]);
   }
</code></pre>
<p>Nicht unbedingt schön und auch nur für kleine konkrete Zahlen anzuraten, aber bei recht aufwendigem f() kann das schon das geringere Übel sein....</p>
<p>Gruß,</p>
<p>Simon2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731066</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Jun 2009 14:44:29 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 16:54:11 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>Ich moechte kein new im Konstruktor haben, damit die Werte moeglichst auf dem Stack abgelegt werden. Im Moment habe ich die new-Version und das ist einfach zu langsam (da extrem viele dieser Polygone instanziiert werden).</p>
</blockquote>
<p>Bist du sicher, dass das am <code>new</code> alleine liegt? Hat dir dein Profiler gesagt, dass die Funktion <code>operator new</code> den kritischen Teil der Zeit beansprucht?</p>
<p>Ich würde eher raten, eine eigene Speicherverwaltung einzurichten, was in diesem Thread auch schon mehrmals erwähnt wurde. Dadurch kannst du dir vielen Speicher aufs Mal anfordern und den dann nach und nach verteilen. Aber der Stack eignet sich nicht für extrem viele oder grosse Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731143</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Jun 2009 16:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Mon, 22 Jun 2009 17:48:54 GMT]]></title><description><![CDATA[<p>Hallo Christian,</p>
<p>gib uns mal etwas mehr Code. Ich kann mir beim besten Willen nicht vorstellen,<br />
dass das wirklich das Problem in deinem Programm ist. Über wieviele Objekte<br />
innerhalb welches Zeitraums unterhalten wir uns denn?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731180</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Tue, 23 Jun 2009 06:58:08 GMT]]></title><description><![CDATA[<p>Im Moment ist der Server down, aber im Laufe des Tages werd ich nochmal testen und kann dann auch mehr zur Datenmenge und zur Laufzeit sagen. Ich habe keinen Profiler verwendet, aber innerhalb der Schleife passiert eigentlich auch nicht wesentlich mehr als das Anlegen von Objekten, und laut System Monitor ist die CPU mehr ausgelastet als das Netzwerk. Wie gesagt, ich werd heut nochmal ein bisschen rumprobieren, dann werd ich hier mehr dazu sagen koennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731369</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Tue, 23 Jun 2009 06:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Tue, 23 Jun 2009 07:07:51 GMT]]></title><description><![CDATA[<p>Rock Lobster schrieb:</p>
<blockquote>
<p>laut System Monitor ist die CPU mehr ausgelastet als das Netzwerk.</p>
</blockquote>
<p>Na und? Das heißt doch nur dass dein Rechner derweil nicht unnötig Zeit verschwendet indem er auf Antworten aus dem Netz wartet sondern die Zeit zum Rechnen nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731374</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 23 Jun 2009 07:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Gibt es sowas wie &amp;lt;?&amp;gt; unter C++? on Tue, 23 Jun 2009 11:30:20 GMT]]></title><description><![CDATA[<p>Nur gibt es da nicht viel zu rechnen, daher wundert es mich schon sehr stark. Er muss nur Daten lesen und in eine Struktur schreiben und diese in einen vector packen. Naja ich werds austesten sobald der Server wieder laeuft, ich hoffe mal das wird heut noch was <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/1731538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731538</guid><dc:creator><![CDATA[Rock Lobster]]></dc:creator><pubDate>Tue, 23 Jun 2009 11:30:20 GMT</pubDate></item></channel></rss>