<?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[Template und Geschwindigkeit]]></title><description><![CDATA[<p>Hallo,</p>
<p>dank der sehr guten Hilfe in diesem Forum, habe ich eine Template-Klasse eines Vectors (3D) erstellt. Nun frage ich mich, ob ich auch darauf geachtet habe, möglichst viel Geschwindigkeit, alleine durch die entsprechende Deklaration der Funktionen und Operatoren, herauszuholen?</p>
<p>Gibt es einen eleganteren Weg an das Array (Pointer) des Vectors heranzukommen, als mit der Funktion array()?</p>
<p>Hier nun mein Header:</p>
<pre><code class="language-cpp">#ifndef VECTOR3D_H_
#define VECTOR3D_H_

template&lt;class T&gt; class Point3D;

template&lt;class T&gt; class Vector3D {

    private:
        //-(Variablen)----------------------------------------------------------
        T n[3]; // x, y, z

    public:

        //-(Konstruktoren)------------------------------------------------------
        inline Vector3D(); // Vektor mit (0,0,0)
        inline Vector3D(const T x, const T y, const T z); // Vektor mit (x,y,z)
        inline Vector3D(const Vector3D&lt;T&gt;&amp; v); // Vektor mit (v.x, v.y, v.z)
        inline Vector3D(const Point3D&lt;T&gt;&amp; a, const Point3D&lt;T&gt;&amp; b); // Erstellt einen Vektor der von a nach b zeigt.

        //-(Überladene Operatoren)----------------------------------------------
        inline T&amp; operator[] (int i);
        inline T operator[] (int i) const;

        inline Vector3D&lt;T&gt;&amp; operator+=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator-=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator*=(const T s);
        inline Vector3D&lt;T&gt;&amp; operator/=(const T s);

        inline Vector3D&lt;T&gt;&amp; operator+() const; // keine notwendige Funktion
        inline Vector3D&lt;T&gt;&amp; operator-() const; // Invertierung

        friend Vector3D&lt;T&gt;&amp; operator+  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator-  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const T s,            const Vector3D&lt;T&gt;&amp; v);
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend Vector3D&lt;T&gt;&amp; operator/  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend T            operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator^  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);

        friend bool         operator== &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend bool         operator!= &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);

        //-(Methoden)-----------------------------------------------------------
        inline T* array(void) const; // Gibt einen Pointer auf das Array zurück
        inline T norm(void) const; // Berechnet die Norm |x²+y²+z²|
        inline T length(void) const; // Berechnet die Länge sqrt(x²+y²+z²)

};

#include &quot;vector3d.cpp&quot; // wegen eines Templatebugs in verschiedenen Compilern.

#endif // VECTOR3D_H_
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/124373/template-und-geschwindigkeit</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 23:47:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124373.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Oct 2005 20:17:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template und Geschwindigkeit on Wed, 26 Oct 2005 20:17:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>dank der sehr guten Hilfe in diesem Forum, habe ich eine Template-Klasse eines Vectors (3D) erstellt. Nun frage ich mich, ob ich auch darauf geachtet habe, möglichst viel Geschwindigkeit, alleine durch die entsprechende Deklaration der Funktionen und Operatoren, herauszuholen?</p>
<p>Gibt es einen eleganteren Weg an das Array (Pointer) des Vectors heranzukommen, als mit der Funktion array()?</p>
<p>Hier nun mein Header:</p>
<pre><code class="language-cpp">#ifndef VECTOR3D_H_
#define VECTOR3D_H_

template&lt;class T&gt; class Point3D;

template&lt;class T&gt; class Vector3D {

    private:
        //-(Variablen)----------------------------------------------------------
        T n[3]; // x, y, z

    public:

        //-(Konstruktoren)------------------------------------------------------
        inline Vector3D(); // Vektor mit (0,0,0)
        inline Vector3D(const T x, const T y, const T z); // Vektor mit (x,y,z)
        inline Vector3D(const Vector3D&lt;T&gt;&amp; v); // Vektor mit (v.x, v.y, v.z)
        inline Vector3D(const Point3D&lt;T&gt;&amp; a, const Point3D&lt;T&gt;&amp; b); // Erstellt einen Vektor der von a nach b zeigt.

        //-(Überladene Operatoren)----------------------------------------------
        inline T&amp; operator[] (int i);
        inline T operator[] (int i) const;

        inline Vector3D&lt;T&gt;&amp; operator+=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator-=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator*=(const T s);
        inline Vector3D&lt;T&gt;&amp; operator/=(const T s);

        inline Vector3D&lt;T&gt;&amp; operator+() const; // keine notwendige Funktion
        inline Vector3D&lt;T&gt;&amp; operator-() const; // Invertierung

        friend Vector3D&lt;T&gt;&amp; operator+  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator-  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const T s,            const Vector3D&lt;T&gt;&amp; v);
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend Vector3D&lt;T&gt;&amp; operator/  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend T            operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator^  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);

        friend bool         operator== &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend bool         operator!= &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);

        //-(Methoden)-----------------------------------------------------------
        inline T* array(void) const; // Gibt einen Pointer auf das Array zurück
        inline T norm(void) const; // Berechnet die Norm |x²+y²+z²|
        inline T length(void) const; // Berechnet die Länge sqrt(x²+y²+z²)

};

#include &quot;vector3d.cpp&quot; // wegen eines Templatebugs in verschiedenen Compilern.

#endif // VECTOR3D_H_
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/901529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901529</guid><dc:creator><![CDATA[Tobain]]></dc:creator><pubDate>Wed, 26 Oct 2005 20:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Wed, 26 Oct 2005 20:41:47 GMT]]></title><description><![CDATA[<p>Hi,<br />
Während des Schafkopfspielens fällt oft der Satz &quot;Es hat sich schon mal jemand totgemischt&quot;, wenn jemand zu lange die Karten mischt. Genauso gut kann man sagen &quot;Es hat sich schon mal jemand totoptimiert&quot;<br />
Zerbrich dir nicht den Kopf darüber die perfekte Vektorklasse hinzukriegen. Bist du schon bei solch &quot;kleinen&quot; Klassen überperfektionistisch, gelingen größere wohl kaum.</p>
<p>Tschau</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901545</guid><dc:creator><![CDATA[Schafkopfspieler]]></dc:creator><pubDate>Wed, 26 Oct 2005 20:41:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Wed, 26 Oct 2005 20:47:55 GMT]]></title><description><![CDATA[<p>Es geht mir hier ja eigentlich nicht darum diese Klasse nun auf das Optimum zu tunen. Sondern darum, welche Möglichkeiten es überhaupt gäbe um es zu tun, falls es mal wirklich darauf ankommt. Die hier von mir verwendete Klasse ist ja eigentlich nur ein Beispiel, an dem ich herausfinden möchte was überhaupt möglich ist. <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/901550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901550</guid><dc:creator><![CDATA[Tobain]]></dc:creator><pubDate>Wed, 26 Oct 2005 20:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 04:57:34 GMT]]></title><description><![CDATA[<p>Tobain schrieb:</p>
<blockquote>
<p>Nun frage ich mich, ob ich auch darauf geachtet habe, möglichst viel Geschwindigkeit, alleine durch die entsprechende Deklaration der Funktionen und Operatoren, herauszuholen?</p>
</blockquote>
<p>sehr gut. Schafkopfspieler unterschätzt, wie wichtig es ist, an kleinen klassen zu üben. natürlich macht man so eine kleine klasse so gut, wie es geht.</p>
<blockquote>
<p>Gibt es einen eleganteren Weg an das Array (Pointer) des Vectors heranzukommen, als mit der Funktion array()?</p>
</blockquote>
<p>ja. return *this;<br />
keine ahnung, weshalb du zeiger auf internre daten veröffentlichen willst. kannst auch nen op[] überladen.</p>
<pre><code class="language-cpp">#ifndef VECTOR3D_H_
#define VECTOR3D_H_

template&lt;class T&gt; class Point3D;//warm denn forward-deklarieren? weg mit dieser zeile!

template&lt;class T&gt; class Vector3D {

    private:
        //-(Variablen)----------------------------------------------------------
//nutloser kommentar. weg!
        T n[3]; // x, y, z
//zu überlegen ist, ob nicht T x,y,z; gemeint war, wenn du schon y,x,z als kommentar dazuschreibst. 
//lieber gute namen und weg mit dem kommentar!
    public:

        //-(Konstruktoren)------------------------------------------------------
//nutzloser kommentar. weg!
        inline Vector3D(); // Vektor mit (0,0,0)
//inline Vector3D(int _x=0,int _y=0,int _z=0);
//und der kommentar kann weg! schreib doch bitte die inhalte in 
//lesbarem c++statt in kommentaren hin. 
//außerdem muss jedes inline weg. kein witz. 
        inline Vector3D(const T x, const T y, const T z); // Vektor mit (x,y,z)
//der kommentar bringt nix. weg!
//const bringt hier auch nix. weg!
        inline Vector3D(const Vector3D&lt;T&gt;&amp; v); // Vektor mit (v.x, v.y, v.z)
//&lt;T&gt; bringt nix. weg! dkbnw!
        inline Vector3D(const Point3D&lt;T&gt;&amp; a, const Point3D&lt;T&gt;&amp; b); // Erstellt einen Vektor der von a nach b zeigt.
//dieser kommentar bringt was! also ist der code schlecht.        
//so muß die heißen: operator-
//und dann natürlich ohne kommentar, weil klar ist, was sie macht. einen vector erstellen, der von b nach a zeigt. 

        //-(Überladene Operatoren)----------------------------------------------
//dkbnw!
        inline T&amp; operator[] (int i);
        inline T operator[] (int i) const;
//muss das wirklich sein? würd ich erstmal wegmachen und drauf warten, bis einer das braucht. 

        inline Vector3D&lt;T&gt;&amp; operator+=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator-=(const Vector3D&lt;T&gt;&amp; v);
        inline Vector3D&lt;T&gt;&amp; operator*=(const T s);
        inline Vector3D&lt;T&gt;&amp; operator/=(const T s);
//ok

        inline Vector3D&lt;T&gt;&amp; operator+() const; // keine notwendige Funktion
//dann weg damit
        inline Vector3D&lt;T&gt;&amp; operator-() const; // Invertierung
//dkbnw!

        friend Vector3D&lt;T&gt;&amp; operator+  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator-  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const T s,            const Vector3D&lt;T&gt;&amp; v);
//s muss nicht const sein, nur zur wiederholung. und mach jedes inline weg. 
        friend Vector3D&lt;T&gt;&amp; operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend Vector3D&lt;T&gt;&amp; operator/  &lt;&gt;(const Vector3D&lt;T&gt;&amp; v, const T s);
        friend T            operator*  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend Vector3D&lt;T&gt;&amp; operator^  &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
//hier müßte ein kommentar hin, denn was soll ^ auf vektoren sein? oder besser, lösch den op und mach ne funktion mit sprechendem namen. 

        friend bool         operator== &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);
        friend bool         operator!= &lt;&gt;(const Vector3D&lt;T&gt;&amp; a, const Vector3D&lt;T&gt;&amp; b);

        //-(Methoden)-----------------------------------------------------------
//dkbnw!
        inline T* array(void) const; // Gibt einen Pointer auf das Array zurück
//glaub nicht, daß die gut ist. 
        inline T norm(void) const; // Berechnet die Norm |x²+y²+z²|
//ok
        inline T length(void) const; // Berechnet die Länge sqrt(x²+y²+z²)
//ok
//lecker wäre eine, die das quadrat der länge berechnet, damit du in vielen zusammenhängen das radizieren sparen kannst. 
};

#include &quot;vector3d.cpp&quot; // wegen eines Templatebugs in verschiedenen Compilern.
//glaub ich nicht. zeig den bug. und inkludiere nie wieder *.cpp. 

#endif // VECTOR3D_H_
</code></pre>
<p>und nu zu<br />
T* array(void);<br />
gib doch ein array mit 3 elemeten zurück.<br />
T array(void)[3];<br />
oder mußte das eher ne referenz auf ein array mit 3 elementen sein?<br />
T (&amp;array(void))[3];<br />
zu komisch schreibweise, also vereinfachen mit typedef<br />
typedef T (&amp;rarr3)[3];<br />
rarr3 array(void);<br />
zu komisch schreibweise, also vereinfachen mit typedef<br />
typedef T arr3[3];<br />
typedef arr3 &amp;rarr3;<br />
rarr3 array(void);<br />
aber ich kette mich damit an die interne implemetierung als array und verbiete mir, x,y,z zu schreiben. also lieber<br />
Vector3D&amp; array(void);<br />
und Vector3D hat ja den op[]<br />
oder hatte array() am ende den zweck, es in diverse ogl-funktionen zuz stopfen? für den fall, würde ich wieder einen kommentar opfern:<br />
//schmonzes für ogl<br />
und unterhalb sowas machen und das ganz am ende der klasse.</p>
<p>und nochwas: schreib in parameterlisten nie wieder (void) statt ().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901620</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 27 Oct 2005 04:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 08:58:13 GMT]]></title><description><![CDATA[<blockquote>
<p>und nochwas: schreib in parameterlisten nie wieder (void) statt ()</p>
</blockquote>
<p>Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901750</guid><dc:creator><![CDATA[?WHY?]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 08:59:30 GMT]]></title><description><![CDATA[<p>&quot;int f(void)&quot; ist ein Relikt aus C-Zeiten (da stand &quot;int f()&quot; noch für &quot;beliebig viele Parameter&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901752</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 09:21:10 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>keine ahnung, weshalb du zeiger auf internre daten veröffentlichen willst. kannst auch nen op[] überladen.</p>
</blockquote>
<p>der umgang mit gl funktionen wird einfacher.<br />
bsp:</p>
<pre><code class="language-cpp">Vector3D&lt;float&gt; v1(5, 70, 0.3);
glVertex3fv(v1.array());
</code></pre>
<p>deswegen auch das array statt x, y, z</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901764</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 27 Oct 2005 09:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 09:25:39 GMT]]></title><description><![CDATA[<p>warum nicht<br />
Vector3D&lt;float&gt; v1(5, 70, 0.3);<br />
glVertex3fv(v1);<br />
?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901768</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 27 Oct 2005 09:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 10:56:31 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>warum nicht<br />
Vector3D&lt;float&gt; v1(5, 70, 0.3);<br />
glVertex3fv(v1);<br />
?</p>
</blockquote>
<p>gehe davon aus das du den umwandlungsoperator meinst. ich muss zugeben das ich nicht so der freund davon bin. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/901828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901828</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:56:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 11:44:24 GMT]]></title><description><![CDATA[<p>miller_m schrieb:</p>
<blockquote>
<p>gehe davon aus das du den umwandlungsoperator meinst. ich muss zugeben das ich nicht so der freund davon bin. <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>
</blockquote>
<p>nein. ich meine eine überladene glVertex3fv(Vector3D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901873</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 27 Oct 2005 11:44:24 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 11:50:44 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>miller_m schrieb:</p>
<blockquote>
<p>gehe davon aus das du den umwandlungsoperator meinst. ich muss zugeben das ich nicht so der freund davon bin. <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>
</blockquote>
<p>nein. ich meine eine überladene glVertex3fv(Vector3D)</p>
</blockquote>
<p>so habe ich es auch gemacht ;), ala</p>
<pre><code class="language-cpp">// aus meinem opengl wrapper
void OglTranslate(float x, float y, float z)	{ glTranslatef(x, y, z); }
void OglTranslate(double x, double y, double z)	{ glTranslated(x, y, z); }
template&lt;
	class Vector_&gt;
void OglTranslate(const Vector_ &amp;v)
{ OglTranslate(v[0], v[1], v[2]); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/901883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901883</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 27 Oct 2005 11:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 11:59:10 GMT]]></title><description><![CDATA[<p>miller_m schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;
	class Vector_&gt;
void OglTranslate(const Vector_ &amp;v)
{ OglTranslate(v[0], v[1], v[2]); }
</code></pre>
</blockquote>
<p>ach, man muß gar kein array benutzen, es geht auch mit drei parametern?<br />
ist dann das nicht viel besser und die array-version viel schlechter?<br />
also netter zum verwenden ist die array-version allemal nicht.<br />
was ist schneller. sei mir erlaubt, daß ich nur ein klitzebisschen in die zukunft gucke auf den ia-64 mit registerstack. da kosten übergaben herzlich wenig. und ram ist wie gehabt teuer. mir scheinen die drei parameter auch schneller.<br />
vielleicht sollten wir den vector3d umstellen wollen auf die 3-parameter-version?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/417">@miller_m</a>: du hast ja bereits sowas gemacht und mehr erfahrung als wir. warum hast du im Vector die daten als array und nicht als x,y,z?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901894</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 27 Oct 2005 11:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Thu, 27 Oct 2005 12:24:36 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/417">@miller_m</a>: du hast ja bereits sowas gemacht und mehr erfahrung als wir. warum hast du im Vector die daten als array und nicht als x,y,z?</p>
</blockquote>
<p>ironie?<br />
wenn nicht. ich ging davon aus das der thread ersteller seine gründe hat, etvl vielleicht auch irgendwelche dx funktionen.<br />
in meiner vektorklasse verwende ich noch ein array wegen vertexarrays und weil ich es früher auch so gemacht habe wie der thread ersteller <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="😃"
    /> . da ich diese auch irgendwann mal verbessern möchte fliegt vermutlich das array in der vektorklasse auch raus. aber einen triftigen grund gibt es afaik nicht.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>ach, man muß gar kein array benutzen, es geht auch mit drei parametern?<br />
ist dann das nicht viel besser und die array-version viel schlechter?<br />
vielleicht sollten wir den vector3d umstellen wollen auf die 3-parameter-version?</p>
</blockquote>
<p>ich habe auch nie behauptet das sie besser oder schlechter sind, ich kann nur ganz gut nachvollziehen was er sich dabei gedacht hat <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/901915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901915</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 27 Oct 2005 12:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 09:39:30 GMT]]></title><description><![CDATA[<p>Mensch da habe ich ja was losgetreten...</p>
<p>Nun stelle ich mir wirklich die Frage was davon nun besser ist, einzelne Variablen oder das Array? Vor allem sehe ich da keinen Vorteil wenn man ein Array verwendet und dann die Funktion mit den Parametern aufruft, anstell das Array zu übergeben.</p>
<pre><code class="language-cpp">// aus meinem opengl wrapper
void OglTranslate(float x, float y, float z)    { glTranslatef(x, y, z); }
void OglTranslate(double x, double y, double z)    { glTranslated(x, y, z); }
template&lt;
    class Vector_&gt;
void OglTranslate(const Vector_ &amp;v)
{ OglTranslate(v[0], v[1], v[2]); }
</code></pre>
<p>Aber wenn man nun das Array nicht verwendet, dann kann man doch nur sehr schwerlich eine Arrayindizierung vornehmen ( Operator[] )?</p>
<pre><code class="language-cpp">float operator[] (int i) {
  switch(i) {
     case 0 : return x;
     case 1 : ...
  }
}
</code></pre>
<p>Das ist doch sicherlich dann keine tolle Lösung oder? Irgendwie verwirrt mich das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> Danke für die Hinweise bei meiner Headerdatei <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>
]]></description><link>https://www.c-plusplus.net/forum/post/902570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902570</guid><dc:creator><![CDATA[Tobain]]></dc:creator><pubDate>Fri, 28 Oct 2005 09:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 09:47:29 GMT]]></title><description><![CDATA[<p>Tobain schrieb:</p>
<blockquote>
<p>Nun stelle ich mir wirklich die Frage was davon nun besser ist, einzelne Variablen oder das Array?</p>
</blockquote>
<p>Da gibt es leider keine Universallösung. Wenn dich die einzelnen Komponenten getrennt interessieren, ist es wohl besser, sie in getrennte Member zu packen. Wenn du den Vektor als Einheit siehst und (z.B.) die Komponenten in Serie (Schleifen o.ä.) abarbeiten willst, bietet sich das Array an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902579</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 28 Oct 2005 09:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 09:51:44 GMT]]></title><description><![CDATA[<p>Tobain schrieb:</p>
<blockquote>
<p>Aber wenn man nun das Array nicht verwendet, dann kann man doch nur sehr schwerlich eine Arrayindizierung vornehmen ( Operator[] )?</p>
<pre><code class="language-cpp">float operator[] (int i) {
  switch(i) {
     case 0 : return x;
     case 1 : ...
  }
}
</code></pre>
</blockquote>
<p>wozu wird der op[] gebraucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902585</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 28 Oct 2005 09:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 10:03:52 GMT]]></title><description><![CDATA[<blockquote>
<p>wozu wird der op[] gebraucht?</p>
</blockquote>
<p>Ich benötige ihn um ab und zu eine einzelne Komponente des Vektors auszulesen, da z.B. manchmal nur der z-Wert interressant ist.</p>
<p>Des weiteren möchte ich schon per Schleife über die Elemente iterieren können (für manche Algorithmen ist das ganz sinnvoll).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Warum soll ich eigentlich das &quot;inline&quot; weglassen?<br />
Also ohne das include &quot;*.cpp&quot; am Ende der Headerdatei will er mir den Code nicht kompilieren und haut so etwas raus:</p>
<pre><code>g++.exe -c main.cpp -o main.o -I&quot;D:/Dev-Cpp/include/c++&quot;  -I&quot;D:/Dev-Cpp/include/c++/mingw32&quot;  -I&quot;D:/Dev-Cpp/include/c++/backward&quot;  -I&quot;D:/Dev-Cpp/include&quot;   

vector3d.h: In instantiation of `Vector3D&lt;float&gt;':
main.cpp:23:   instantiated from here
vector3d.h:68: error: template-id `operator+&lt;&gt;' for `Vector3D&lt;float&gt;&amp; 
   operator+(const Vector3D&lt;float&gt;&amp;, const Vector3D&lt;float&gt;&amp;)' does not match 
   any template declaration

vector3d.h:69: error: template-id `operator-&lt;&gt;' for `Vector3D&lt;float&gt;&amp; 
   operator-(const Vector3D&lt;float&gt;&amp;, const Vector3D&lt;float&gt;&amp;)' does not match 
   any template declaration

vector3d.h:70: error: `operator*' not defined

vector3d.h:71: error: `operator*' not defined

vector3d.h:72: error: `operator/' not defined

vector3d.h:73: error: `operator*' not defined

vector3d.h:74: error: template-id `operator^&lt;&gt;' for `Vector3D&lt;float&gt;&amp; 
   operator^(const Vector3D&lt;float&gt;&amp;, const Vector3D&lt;float&gt;&amp;)' does not match 
   any template declaration

vector3d.h:76: error: template-id `operator==&lt;&gt;' for `bool operator==(const 
   Vector3D&lt;float&gt;&amp;, const Vector3D&lt;float&gt;&amp;)' does not match any template 
   declaration

vector3d.h:77: error: template-id `operator!=&lt;&gt;' for `bool operator!=(const 
   Vector3D&lt;float&gt;&amp;, const Vector3D&lt;float&gt;&amp;)' does not match any template 
   declaration

vector3d.h:20: warning: inline function `Vector3D&lt;T&gt;::Vector3D() [with T = 
   float]' used but never defined
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/902595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902595</guid><dc:creator><![CDATA[Tobain]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 10:09:18 GMT]]></title><description><![CDATA[<p>Tobain schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Warum soll ich eigentlich das &quot;inline&quot; weglassen?</p>
</blockquote>
<p>&quot;inline&quot; gehört an die Funktionsdefinition, nicht an die Deklaration. (und die meisten Compiler entscheiden sowieso selbständig, welche Funktionen sie inline erweitern wollen).<br />
(und Templates und Übersetzungseinheiten sind sowieso ein Thema für sich ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902601</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 10:11:23 GMT]]></title><description><![CDATA[<p>Tobain schrieb:</p>
<blockquote>
<blockquote>
<p>wozu wird der op[] gebraucht?</p>
</blockquote>
<p>Ich benötige ihn um ab und zu eine einzelne Komponente des Vektors auszulesen, da z.B. manchmal nur der z-Wert interressant ist.</p>
</blockquote>
<p>da geht auch T getZ(){return z};</p>
<blockquote>
<p>Des weiteren möchte ich schon per Schleife über die Elemente iterieren können (für manche Algorithmen ist das ganz sinnvoll).</p>
</blockquote>
<p>bleib mal ernsthaft. du wirst nicht eine schleife bauen, die über drei elemente iterieret und dir gleichzeitig woanders gedanken um speed machen.</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Warum soll ich eigentlich das &quot;inline&quot; weglassen?</p>
</blockquote>
<p>wels der compiler innherhalb von klassen selber hinschreibt.<br />
und außerhalb schreibt er's da hin, wo es seinermeinung nach sinnvoll ist. und er hat ne gute einschätzung der lage. ja, in der tat. bei mir ist der resultierende code eigentlich immer schneller, wenn ich ihm freie hand lasse. manchmal ist ja kleinerer code schneller, weil caches besserausgenutzt werden und branch-precognition.</p>
<blockquote>
<p>Also ohne das include &quot;*.cpp&quot; am Ende der Headerdatei will er mir den Code nicht kompilieren und haut so etwas raus:</p>
</blockquote>
<p>trotzdem nicht *.cpp includen. nenn sie um in *.inc oder *.imp, oder *_cpp.h oder so.<br />
makefiles und so müssen sich drauf verlassen können, daß alle *.cpp durchcompiliert werden können.</p>
<p>außerdem schreibt man die implemetierungen von template-funktionen eh normalerweise in den header.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902603</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template und Geschwindigkeit on Fri, 28 Oct 2005 10:33:51 GMT]]></title><description><![CDATA[<p>Man das ist irgendwie alles nicht so durchsichtig, ich bräuchte mal das &quot;perfekte Beispiel&quot; mit ner guten Erklärung. Leider wird immer nur ein Aspekt behandelt und wenn 2 Aspekte zusammenkommen, dann ist eh alles wieder fürn Ar***.</p>
<p>Ein großes Danke an alle die sich bis jetzt bemüht haben mir zu helfen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/902623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902623</guid><dc:creator><![CDATA[Tobain]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:33:51 GMT</pubDate></item></channel></rss>