<?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 spezialisierung]]></title><description><![CDATA[<p>Ich hab gut 2 Jahre kein C++ mehr programmiert und muss nun ins kalte Wasser ohne Bücher etc. und ich find grad nicht das passende in den FAQs oder Google.</p>
<p>Ich bin in der spezialisierung von templates verunrsichert, da sich der VC8 hier merkwürdig verhält.</p>
<p>Behauptung meinerseits:</p>
<blockquote>
<p>Wenn ich ein template spezialisiere , muss ich jede einzelne Methode der Klasse spezialisieren.</p>
</blockquote>
<p>Je nach Projekt erlaubt der VC8 folgenden Code:</p>
<pre><code class="language-cpp">template &lt;class T&gt; struct  a
{
	T test();
	T test2();
};

template &lt;&gt; struct a&lt;int&gt;
{
	int test();
};

template &lt;class T&gt; T a&lt;T&gt;::test(){}
template &lt;class T&gt; T a&lt;T&gt;::test2(){}

// template &lt;&gt; int a&lt;int&gt;::test(){return 0;}
int a&lt;int&gt;::test(){return 0;}

int _tmain(int argc, _TCHAR* argv[])
{
	a&lt;int&gt; A;
	A.test2();
	return 0;
}
</code></pre>
<p>Für A.test2 wird template &lt;class T&gt; T a&lt;T&gt;::test2(){} aufgerufen. Erzeuge ich eine Spezialisierung für a&lt;int&gt;::test2 , wird diese genommen.</p>
<p>Stimmt meine Behauptung nach standard oder reicht es bei einer Spezialisierung nur das notwendigste zu machen ?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156651/template-spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 22:10:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156651.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Aug 2006 17:49:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template spezialisierung on Fri, 18 Aug 2006 17:49:49 GMT]]></title><description><![CDATA[<p>Ich hab gut 2 Jahre kein C++ mehr programmiert und muss nun ins kalte Wasser ohne Bücher etc. und ich find grad nicht das passende in den FAQs oder Google.</p>
<p>Ich bin in der spezialisierung von templates verunrsichert, da sich der VC8 hier merkwürdig verhält.</p>
<p>Behauptung meinerseits:</p>
<blockquote>
<p>Wenn ich ein template spezialisiere , muss ich jede einzelne Methode der Klasse spezialisieren.</p>
</blockquote>
<p>Je nach Projekt erlaubt der VC8 folgenden Code:</p>
<pre><code class="language-cpp">template &lt;class T&gt; struct  a
{
	T test();
	T test2();
};

template &lt;&gt; struct a&lt;int&gt;
{
	int test();
};

template &lt;class T&gt; T a&lt;T&gt;::test(){}
template &lt;class T&gt; T a&lt;T&gt;::test2(){}

// template &lt;&gt; int a&lt;int&gt;::test(){return 0;}
int a&lt;int&gt;::test(){return 0;}

int _tmain(int argc, _TCHAR* argv[])
{
	a&lt;int&gt; A;
	A.test2();
	return 0;
}
</code></pre>
<p>Für A.test2 wird template &lt;class T&gt; T a&lt;T&gt;::test2(){} aufgerufen. Erzeuge ich eine Spezialisierung für a&lt;int&gt;::test2 , wird diese genommen.</p>
<p>Stimmt meine Behauptung nach standard oder reicht es bei einer Spezialisierung nur das notwendigste zu machen ?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119886</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Fri, 18 Aug 2006 17:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Fri, 18 Aug 2006 19:44:48 GMT]]></title><description><![CDATA[<p>Ich versteh grad nicht was du willst. Natürlich wird das spezialisierteste genommen und sonst die allgemeine Version.</p>
<p>Und spracherweiterungen sind im vc8 doch standardmäßig deaktiviert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119956</guid><dc:creator><![CDATA[Hä]]></dc:creator><pubDate>Fri, 18 Aug 2006 19:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Fri, 18 Aug 2006 21:32:14 GMT]]></title><description><![CDATA[<p>Das ist halt die frage, übersetzt man das ganze als reine Konsolenanwendung meckert der compiler, das es keine spezialisierung für</p>
<p>template &lt;&gt; int a&lt;int&gt;::test2(); gibt.</p>
<p>Ich finde es also als nicht natürlich, das immer das spezialisiertere genommmen wird. Ich bin der Meinung, das bei spezialisierung der gesammten Klasse (!) alle Methoden spezialisiert werden müssen (woran sich der VC8 im Mixedmode nicht hält). Hier liegt keine Überladung des Members durch eine spezialisierung vor.</p>
<pre><code class="language-cpp">// Generische Klasse
template &lt;class T&gt; struct  a
{
	T test();
	T test2();
};

// Sepzialisierung der gesammten Klasse aus int
template &lt;&gt; struct a&lt;int&gt;
{
	int test();
};

template &lt;class T&gt; T a&lt;T&gt;::test(){return 0;}
// Überladung der Methode mit bool
template &lt;&gt; bool a&lt;bool&gt;::test(){return false;}
template &lt;class T&gt; T a&lt;T&gt;::test2(){return 0;}

int a&lt;int&gt;::test(){return 0;}

int _tmain(int argc, _TCHAR* argv[])
{
	a&lt;int&gt; A;
	A.test();	// int a&lt;int&gt;::test(){return 0;}
	A.test2();	// FEHLER test2 nicht vorhanden in a&lt;int&gt;

	a&lt;bool&gt; B;
	B.test();	// template &lt;&gt; bool a&lt;bool&gt;::test(){return false;}	

	a&lt;float&gt; C;
	C.test();	// template &lt;class T&gt; T a&lt;T&gt;::test(){return 0;}
}
</code></pre>
<p>Wie gesagt bin ich dem C++ ein wenig fern, daher hätt ich gern die Meinung von jenen die keine zwangspausen gemacht haben dazu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> (Hume, Volker ?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120011</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Fri, 18 Aug 2006 21:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Fri, 18 Aug 2006 21:46:34 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Stimmt meine Behauptung nach standard oder reicht es bei einer Spezialisierung nur das notwendigste zu machen ?</p>
</blockquote>
<p>Deine Behauptung stimmt. (Wenn du dir bei sowas nicht sicher bist hilft oft schon <a href="http://www.comeaucomputing.com/tryitout/" rel="nofollow">www.comeaucomputing.com/tryitout/</a>; keine ultimative Kontrollinstanz aber recht standardkonform und zumeist schon mal eine &quot;zweite Meinung&quot;.)</p>
<p>Wenn es dir wirklich nur um einzelne Methoden geht solltest du dir trotzdem Copy&amp;Paste-Orgien ersparen:</p>
<pre><code class="language-cpp">template &lt;class T, class FooType&gt;
struct FooBase
{
  T returnSomething() { return T(42); }
  FooType&amp; doSomething() { return *static_cast&lt;FooType*&gt;(this); }
};

template &lt;class T&gt;
struct Foo : FooBase&lt;T, Foo&lt;T&gt; &gt;
{
  using FooBase&lt;T, Foo&lt;T&gt; &gt;::returnSomething;
  T returnSomethingElse() { return returnSomething() * 314; }
};

template &lt;&gt;
struct Foo&lt;double&gt; : FooBase&lt;double, Foo&lt;double&gt; &gt;
{
  using FooBase&lt;double, Foo&lt;double&gt; &gt;::returnSomething;
  double returnSomethingElse() { return returnSomething() * 3.14; }
};

// alt #1

template &lt;class T&gt;
struct GenerateSomething
{
  T doIt() { return T(0); }
};

template &lt;&gt;
struct GenerateSomething&lt;int&gt;
{
  int doIt() { return 1; }
};

template&lt;
  class T,
  template &lt;class&gt; class SomePolicy = GenerateSomething&gt;
struct Bar : SomePolicy&lt;T&gt;
{
  using SomePolicy&lt;T&gt;::doIt;
  T returnSomething() { return doIt(); }
};

// alt #2

template &lt;class T&gt;
struct ClosedBar
{
  T returnSomething()
  {
    GenerateSomething&lt;T&gt; g;
    return g.doIt();
  }
};

// etc
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1120017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120017</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 18 Aug 2006 21:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Fri, 18 Aug 2006 21:55:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen dank für den Link.</p>
<p>Ist die Überladung der Methode in meinem obrigen Beispiel nach standard legal ?</p>
<pre><code class="language-cpp">(template &lt;&gt; bool a&lt;bool&gt;::test(){return false;} )
</code></pre>
<p>Wenn ja, könnte mir das sehr sehr viel Umbauarbeiten ersparen - und ärger in dem ich diese eine Methode überlade.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120022</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Fri, 18 Aug 2006 21:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Sat, 19 Aug 2006 15:48:07 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Ist die Überladung der Methode in meinem obrigen Beispiel nach standard legal?</p>
</blockquote>
<p>Die <em>Spezialisierung</em> ist OK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120363</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 19 Aug 2006 15:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to template spezialisierung on Sun, 20 Aug 2006 10:01:13 GMT]]></title><description><![CDATA[<p>Vielen vielen Dank fürs drüber schauen und noch mal vielen Dank für den Link <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Gruß</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120759</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 20 Aug 2006 10:01:13 GMT</pubDate></item></channel></rss>