<?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[spezifischer Konstruktor für Template-Klasse]]></title><description><![CDATA[<p>Ich habe für einen speziellen Zweck eine Template-Klasse für einen n-dimensionalen Vektor geschrieben (dasss die Bezeichnung Vector etwas ungünstig ist, weil die entsprechende Klasse aus der STL genauso, nur in klein heißt, soll mal nicht stören.</p>
<p>Auszug:</p>
<pre><code>template &lt; unsigned int dim &gt; class Vector
{
public:
	float x[dim];

// zahlreiche Funktionen
}
</code></pre>
<p>Nun wollte ich einen Konstruktor erstellen, um einen 3D-Vektor zu erzeugen (2,3 und 4-dimensionale Vektoren brauche ich am meisten).</p>
<p>Also versucht in die Klasse zu schreiben:</p>
<pre><code>Vector &lt; 3 &gt; (float in_x0, float in_x1, float in_x2);
</code></pre>
<p>und enstsprechend in der cpp-Datei:</p>
<pre><code>Vector::Vector &lt; 3 &gt; (float in_x0, float in_x1, float in_x2)
{
	x[0]=in_x0;
	x[1]=in_x1;
	x[2]=in_x2;

}
</code></pre>
<p>Auch mein zweiter Ansatz:</p>
<pre><code>template &lt; unsigned int dim &gt; Vector &lt; 3 &gt;::Vector(float in_x0, float in_x1, float in_x2);
</code></pre>
<p>und in der cpp-Datei:</p>
<pre><code>template &lt;unsigned int dim &gt; Vector&lt;3&gt;::Vector (float in_x0, float in_x1, float in_x2)
{
	x[0]=in_x0;
	x[1]=in_x1;
	x[2]=in_x2;

}
</code></pre>
<p>(funktionierte auch nicht, als ich das &quot;template &lt;unsigned int dim &gt;&quot; wegließ).</p>
<p>ging daneben.</p>
<p>Alles gibt Compile-Fehler. Daher: könnte mir jemand erklären, wie ich es richtig mache?</p>
<p>Daher bitte ich euch um Hilfe.</p>
<p>Mit herzlichem Dank<br />
Wolfgke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124402/spezifischer-konstruktor-für-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 23:42:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124402.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Oct 2005 09:56:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Thu, 27 Oct 2005 09:56:21 GMT]]></title><description><![CDATA[<p>Ich habe für einen speziellen Zweck eine Template-Klasse für einen n-dimensionalen Vektor geschrieben (dasss die Bezeichnung Vector etwas ungünstig ist, weil die entsprechende Klasse aus der STL genauso, nur in klein heißt, soll mal nicht stören.</p>
<p>Auszug:</p>
<pre><code>template &lt; unsigned int dim &gt; class Vector
{
public:
	float x[dim];

// zahlreiche Funktionen
}
</code></pre>
<p>Nun wollte ich einen Konstruktor erstellen, um einen 3D-Vektor zu erzeugen (2,3 und 4-dimensionale Vektoren brauche ich am meisten).</p>
<p>Also versucht in die Klasse zu schreiben:</p>
<pre><code>Vector &lt; 3 &gt; (float in_x0, float in_x1, float in_x2);
</code></pre>
<p>und enstsprechend in der cpp-Datei:</p>
<pre><code>Vector::Vector &lt; 3 &gt; (float in_x0, float in_x1, float in_x2)
{
	x[0]=in_x0;
	x[1]=in_x1;
	x[2]=in_x2;

}
</code></pre>
<p>Auch mein zweiter Ansatz:</p>
<pre><code>template &lt; unsigned int dim &gt; Vector &lt; 3 &gt;::Vector(float in_x0, float in_x1, float in_x2);
</code></pre>
<p>und in der cpp-Datei:</p>
<pre><code>template &lt;unsigned int dim &gt; Vector&lt;3&gt;::Vector (float in_x0, float in_x1, float in_x2)
{
	x[0]=in_x0;
	x[1]=in_x1;
	x[2]=in_x2;

}
</code></pre>
<p>(funktionierte auch nicht, als ich das &quot;template &lt;unsigned int dim &gt;&quot; wegließ).</p>
<p>ging daneben.</p>
<p>Alles gibt Compile-Fehler. Daher: könnte mir jemand erklären, wie ich es richtig mache?</p>
<p>Daher bitte ich euch um Hilfe.</p>
<p>Mit herzlichem Dank<br />
Wolfgke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901792</guid><dc:creator><![CDATA[Wolfgke]]></dc:creator><pubDate>Thu, 27 Oct 2005 09:56:21 GMT</pubDate></item><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Thu, 27 Oct 2005 10:05:17 GMT]]></title><description><![CDATA[<p>Wenn du ein Template spzialisierst, mußt du dem Compiler zwar sagen, daß das eine Template-Klasse sein soll, aber du mußt die Parameter nicht wiederholen:</p>
<pre><code class="language-cpp">template&lt;unsigned int dim&gt; class Vector
{
  // allgemeine Operationen
}

template&lt;&gt; class Vector&lt;3&gt;
{
  // Operationen für 3D-Vektoren
}
//wichtig: alle allgemeinen Vektor-Operationen mußt du auch neu definieren

//Alternative:
class Vector3D : public Vector&lt;3&gt;
{
  // Operationen für 3D-Vektoren
}
//der erbt die allgemeinen Operationen von Vector&lt;..&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/901796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901796</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Thu, 27 Oct 2005 10:17:16 GMT]]></title><description><![CDATA[<p>Sieht schonmal ganz gut aus.</p>
<p>Lediglich warum muss ich für</p>
<pre><code>template&lt;&gt; class Vector&lt;3&gt;
</code></pre>
<p>auch die allgemeinen Operationen nochmal definieren?</p>
<p>(die Vererbung würde ich persönlich sowohl aus strukturellen (eine Konvertierung von Vektoren verschiedener Dimensionen soll möglichst einfach möglich sein) als auch aus Performance-Gründen (den Code, den ich erstelle ist sehr rechenaufwändig und plane ich außerdem in einem Spiel einzusetzen) eher ablehnen).</p>
<p>Sollte C++ nicht intelligent genug sein, von selbst zu erkennen, dass 3 ein Spezialfall von einem &quot;unsigned int&quot; darstellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901807</guid><dc:creator><![CDATA[Wolfgke]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Thu, 27 Oct 2005 10:19:23 GMT]]></title><description><![CDATA[<blockquote>
<p>Sollte C++ nicht intelligent genug sein, von selbst zu erkennen, dass 3 ein Spezialfall von einem &quot;unsigned int&quot; darstellt?</p>
</blockquote>
<p>Aus deiner Sicht ist es ein Spezialfall, aber für C++ ist es ein neuer Typ. Da wirst nicht drumrumkommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901811</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Thu, 27 Oct 2005 10:25:01 GMT]]></title><description><![CDATA[<p>Wolfgke schrieb:</p>
<blockquote>
<p>Sieht schonmal ganz gut aus.</p>
<p>Lediglich warum muss ich für</p>
<pre><code>template&lt;&gt; class Vector&lt;3&gt;
</code></pre>
<p>auch die allgemeinen Operationen nochmal definieren?</p>
</blockquote>
<p>Weil C++ davon ausgeht, daß du die Spezialisierung aus gutem Grund geliefert hast - und ehe es die Default-Operationen auf einer möglicherweise speziell angepassten Datenstruktur loslaufen lässt, blockt es lieber gleich ab (stell' dir doch mal vor, du implementierst den allgemeinen Vektor mit einem double-Array, den 3D-Vektor allerdings mit drei Membern x,y und z - und dann versuch einen Array-Zugriff ohne Array durchzuführen)</p>
<blockquote>
<p>(die Vererbung würde ich persönlich sowohl aus strukturellen (eine Konvertierung von Vektoren verschiedener Dimensionen soll möglichst einfach möglich sein) als auch aus Performance-Gründen (den Code, den ich erstelle ist sehr rechenaufwändig und plane ich außerdem in einem Spiel einzusetzen) eher ablehnen).</p>
</blockquote>
<p>Wenn's dir um die Konvertierbarkeit geht, solltest du lieber keine Templates einsetzen - Vector&lt;3&gt; ist für C++ komplett inkompatibel zu (z.B.) Vector&lt;5&gt;, solange du keine expliziten Konvertierungsoperatoren einbaust.</p>
<blockquote>
<p>Sollte C++ nicht intelligent genug sein, von selbst zu erkennen, dass 3 ein Spezialfall von einem &quot;unsigned int&quot; darstellt?</p>
</blockquote>
<p>Ist es doch auch, deswegen brauchst du das &quot;unsigned int&quot; bei der Spezialisierung auch nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901816</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to spezifischer Konstruktor für Template-Klasse on Sat, 29 Oct 2005 11:07:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a><br />
Danke, damit sind meine Fragen bezüglich dieses Themas geklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903289</guid><dc:creator><![CDATA[Wolfgke]]></dc:creator><pubDate>Sat, 29 Oct 2005 11:07:26 GMT</pubDate></item></channel></rss>