<?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[templatespezialisierung der besonderen art]]></title><description><![CDATA[<p>hi</p>
<p>ich habe eine vektor-klasse die als tempalte argument den typ der einträge und die dimensionen als unsigned erwartet. soweit sogut. es wäre für den nutzer konfortabler wenn er schreiben könnte:</p>
<pre><code>vec&lt;float, 3&gt; myvec(5.f, 2.f, 8.f); // kein c++11 daher keine initialiser list
myvec.x = myvec.z - myvec.y; //xyz kommen nur bei vec&lt;T, 3&gt; vor (analog bei 2 und 4)
</code></pre>
<p>bedeutet dass ich für alle vec's mit der dimension 3 alle alten member und methoden haben möchte aber zusätzlich einen konstruktor und drei referenzen. wie ist das am einfachsten zu lösen ohne redunanten code?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320870/templatespezialisierung-der-besonderen-art</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:15:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320870.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Oct 2013 11:52:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 11:52:12 GMT]]></title><description><![CDATA[<p>hi</p>
<p>ich habe eine vektor-klasse die als tempalte argument den typ der einträge und die dimensionen als unsigned erwartet. soweit sogut. es wäre für den nutzer konfortabler wenn er schreiben könnte:</p>
<pre><code>vec&lt;float, 3&gt; myvec(5.f, 2.f, 8.f); // kein c++11 daher keine initialiser list
myvec.x = myvec.z - myvec.y; //xyz kommen nur bei vec&lt;T, 3&gt; vor (analog bei 2 und 4)
</code></pre>
<p>bedeutet dass ich für alle vec's mit der dimension 3 alle alten member und methoden haben möchte aber zusätzlich einen konstruktor und drei referenzen. wie ist das am einfachsten zu lösen ohne redunanten code?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360418</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Tue, 15 Oct 2013 11:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 12:03:18 GMT]]></title><description><![CDATA[<p>Warum ueberhaupt Templates, wenn nur 2d-, 3d- oder 4d-Vektoren vorkommen? Ohne Templates geht es mit dem Union-Trick, der nicht standardkonform ist, aber von allen mir bekannten Kompilern (gcc, visual c++) unterstuetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360421</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 12:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 12:08:14 GMT]]></title><description><![CDATA[<p>es kommen nicht nur 2d - 4d-vektoren vor, es können vektoren mit beliebiger anzahl an dimensionen vorkommen, für die mit 2 - 4 dimensionen würde ich nur gerne einen konstruktor und ein paar referenzen anbieten.</p>
<p>und auch wenn ein trick von mehreren compilern unterstützt wird würde ich ihn dennoch lieber nicht verwenden, solange er nicht standardkonform ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360425</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Tue, 15 Oct 2013 12:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 12:58:45 GMT]]></title><description><![CDATA[<p>Dann kannst du spezialisiert auf 2d-, 3d- oder 4d-Vektoren Funktionen x(), y(), z() und w() anbieten, die eine Referenz auf das Arrayelement zurueckliefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360436</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 12:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 13:04:16 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Dann kannst du spezialisiert auf 2d-, 3d- oder 4d-Vektoren Funktionen x(), y(), z() und w() anbieten, die eine Referenz auf das Arrayelement zurueckliefern.</p>
</blockquote>
<p>als globale funktionen? die idee gefällt mir. make_vec als globale funktion ist sicher auch nicht schlecht, kann der compiler eh wegoptimieren...</p>
<p>danke dir, auf den weg bin ich nicht gekommen, ich bin immer so beschränkt auf methoden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360439</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Tue, 15 Oct 2013 13:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 13:42:31 GMT]]></title><description><![CDATA[<p>Nein, als Methode vec&lt;float,3&gt;.x() . Global geht auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360455</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 13:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 14:17:10 GMT]]></title><description><![CDATA[<p>Vllt ein bissl umständlich, macht aber im wesentlich das was du willst. Ist als Bsp zu vertehen, kenne deine vector implementierung nicht.</p>
<pre><code>#include &lt;iostream&gt;

template &lt;typename T, std::size_t N&gt; 
struct ref_t : public ref_t&lt;T,3&gt;
{
	typedef ref_t&lt;T,3&gt; base;

	template &lt;std::size_t NN&gt;
	ref_t (T (&amp;val)[NN] ) : base(val) {}
};

template &lt;typename T&gt;
struct ref_t &lt;T, 0&gt; 
{
	T&amp; x;

	template &lt;std::size_t N&gt;
	ref_t (T (&amp;val)[N]) : x(val[0]) {}
};

template &lt;typename T&gt;
struct ref_t &lt;T, 1&gt; : public ref_t &lt;T, 0&gt;
{
	typedef ref_t&lt;T,0&gt; base;

	T&amp; y;

	template &lt;std::size_t N&gt;
	ref_t (T (&amp;val)[N]) : base(val), y(val[1]) {}
};

template &lt;typename T&gt;
struct ref_t &lt;T, 2&gt; : public ref_t &lt;T, 1&gt;
{
	typedef ref_t&lt;T,1&gt; base;

	T&amp; z;

	template &lt;std::size_t N&gt;
	ref_t (T (&amp;val)[N]) : base(val), z(val[2]) {}
};

template &lt;typename T&gt;
struct ref_t &lt;T, 3&gt;  : public ref_t&lt;T, 2&gt;
{
	typedef ref_t&lt;T,2&gt; base;

	T&amp; w;

	template &lt;std::size_t N&gt;
	ref_t (T (&amp;val)[N]) : base(val), w(val[3]) {}
};

template &lt;typename T, std::size_t N&gt;
struct my_vec_impl
{
	T value[N];
};

template &lt;typename T, std::size_t N&gt;
class my_fancy_vec : my_vec_impl&lt;T,N&gt;, public ref_t&lt;T,N-1&gt;
{
public:
	typedef my_vec_impl&lt;T,N&gt; 	storage;
	typedef ref_t &lt;T, N-1&gt; 		fancy_bussines_stuff;

// 	using fancy_bussines_stuff;

	my_fancy_vec () : storage(), fancy_bussines_stuff(storage::value) {}

	//...

	T&amp;       operator[] (std::size_t n)        { return storage::value[n]; }
	const T&amp; operator[] (std::size_t n) const  { return storage::value[n]; }

	T*       begin()       { return storage::value; }
	const T* begin() const { return storage::value; }

	T*       end()       { return storage::value+N; }
	const T* end() const { return storage::value+N; }
	//...
};

int main()
{
	my_fancy_vec&lt;double, 10&gt; vector;

	vector.x = 3.11;
	vector.y = 3.12;
	vector.z = 3.13;
	vector.w = 3.14;
	vector[4]= 3.15;
	vector[5]= 3.16;
	vector[6]= 3.17;
	vector[7]= 3.18;
	vector[8]= 3.19;
	vector[9]= 3.20;

	for (auto&amp; iter : vector )
	{
		std::cout &lt;&lt; iter &lt;&lt; std::endl;
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2360465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360465</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Tue, 15 Oct 2013 14:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 14:28:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Vllt ein bissl umständlich</p>
</blockquote>
<p>Code bloat in Reinform, uebererfuellt, warum nicht gleich was absolut generelles wie type_traits aus boost::geometry ...</p>
<p>ich dachte eher an:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct vec&lt;T, 3&gt;
{
    std::array&lt;T, 3&gt; ele;

    T&amp; x()
    {
       return ele[0];
    }
    ...
};
</code></pre>
<p>oder als freie Funktion</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
auto x(T&amp; v) -&gt; decltype&lt;T.ele[0]&amp;&gt;
{
    return v[0];
}
</code></pre>
<p>ungetestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360472</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 14:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 14:52:11 GMT]]></title><description><![CDATA[<p>ach ich finde den vorschlag von ScottZhang gut, habe es eben für meinen vektor nachimplementiert, meine version stimmt aber noch nicht so ganz bzgl. der const-correctness. ich würde einfach gern die member-schreibweise haben weil sie so intuitiv ist, daher ist mir sein vorschlag auch lieber als das mit den globalen accessern. wie du - knivil - dein erstes listing implementieren willst bleibt mir ein rätsel. leitet die spezialisierte form von vec etwa von einer klasse vec_base oder so ab? denn ich hab keine lust alle methoden von vec für jede spezialisierung neu zu definieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360480</guid><dc:creator><![CDATA[not smart]]></dc:creator><pubDate>Tue, 15 Oct 2013 14:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:15:13 GMT]]></title><description><![CDATA[<p>Spezifiziere vec&lt;T,int&gt; ... und wozu du Lust hast, kann ich nicht wissen. Meine &quot;vec&quot;-Implementierungen sehen fuer gewoehnlich so aus:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct vec_2d
{
     T x, y;
};
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct vec_2d
{
     T ele[2];
};
</code></pre>
<blockquote>
<p>wie du - knivil - dein erstes listing implementieren willst bleibt mir ein rätsel</p>
</blockquote>
<p>Indem ich es einfach hinschreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360481</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:15:13 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:22:52 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Vllt ein bissl umständlich</p>
</blockquote>
<p>Code bloat in Reinform, uebererfuellt, warum nicht gleich was absolut generelles wie type_traits aus boost::geometry ...</p>
</blockquote>
<p>schon klar, aber er wollte eben .x .y .z ... haben und code bloat ist was anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360486</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:26:24 GMT]]></title><description><![CDATA[<p>Entschuldige ... boilerplate code .. und ich kann es nur an meinen vec-structs messen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360488</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:30:40 GMT]]></title><description><![CDATA[<p>ich würde das auch nicht haben wollen, aber wer auf son oberflächigen Bussineskram steht. Nen stinknormaler Zugriff übern Klammeroperator reicht meiner Meinung nach aus, oder wie du es vorschlägst mit ner freien Funktion als alternative wäre auch meine erste Wahl gewesen. Ich schätze mal er hat das aus der Shaderprogrammierung, da addressiert man die Komponenten auch so.</p>
<p>PS: Boilerplate im übrigen auch nicht <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/2360491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360491</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:43:42 GMT]]></title><description><![CDATA[<p>Na dann sag mir einen besseren Begriff ... beide sind fuer mich zutreffend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360494</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:44:43 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht sicher, geht es denn kürzer wenn man genau dieses Feature will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360495</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to templatespezialisierung der besonderen art on Tue, 15 Oct 2013 15:57:16 GMT]]></title><description><![CDATA[<p>Genau ... wahrscheinlich nicht ... ich sach immer: viel wuenschen und weniger wollen <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/2360504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360504</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 15 Oct 2013 15:57:16 GMT</pubDate></item></channel></rss>