<?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>Hi zusammen,<br />
wenn ich ein Klassen-Template hab ala</p>
<pre><code>template&lt;int typ&gt; class A
{
};
</code></pre>
<p>Ist es möglich Konstruktoren oder Memberfunktionen zu erzeugen, die nur für einen einzigen Typen gelten ?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333873/template-spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 07:51:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333873.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Aug 2015 14:04:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 14:04:30 GMT]]></title><description><![CDATA[<p>Hi zusammen,<br />
wenn ich ein Klassen-Template hab ala</p>
<pre><code>template&lt;int typ&gt; class A
{
};
</code></pre>
<p>Ist es möglich Konstruktoren oder Memberfunktionen zu erzeugen, die nur für einen einzigen Typen gelten ?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462802</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Thu, 06 Aug 2015 14:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 14:08:36 GMT]]></title><description><![CDATA[<p>Ja, <a href="http://en.cppreference.com/w/cpp/types/enable_if" rel="nofollow">http://en.cppreference.com/w/cpp/types/enable_if</a></p>
<p>Da ein Konstruktor keinen Rückgabewert hat musst du das enable_if auf einen Parameter anwenden. Wenn du keine Parameter nimmst, dann weiß ich auch nichts mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462804</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Thu, 06 Aug 2015 14:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 14:09:53 GMT]]></title><description><![CDATA[<p>Ja, z.B. per std::enable_if (SFINAE). Du kannst aber auch das gesamte Klassentemplate explizit spezialisieren. Kommt auf den Fall an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462805</guid><dc:creator><![CDATA[Jodocus]]></dc:creator><pubDate>Thu, 06 Aug 2015 14:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 14:17:55 GMT]]></title><description><![CDATA[<p>Sicher das du als Template Parameter keinen Typ sondern einen int mit einem bestimmten Wert haben möchtest? Wenn ja dann kann man etwa sowas machen:</p>
<pre><code>#include &lt;type_traits&gt;

template&lt;int typ&gt; class A
{
public:
	template &lt;int dummy = typ, class T = typename std::enable_if&lt;dummy == 5&gt;::type&gt;
	void foo() {}
};

int main()
{
	A&lt;1&gt; a;
	A&lt;5&gt; b;

	//a.foo();  // fehler hier
	b.foo();
}
</code></pre>
<p>Hier habe ich std::enable_if mit einem Default Template Parameter gemacht. Man kann es auch in einen der Parameter oder als Rückgabewert packen. Man beachte außerdem die zusätzliche Indirektion (Idee von <a href="https://www.youtube.com/watch?v=dTeKf5Oek2c" rel="nofollow">hier</a>) über die <code>dummy</code> Variable, damit es bei der Instanzierung von <code>A&lt;1&gt;</code> nicht sofort einen Compilerfehler gibt. Es gibt aber auch noch andere Möglichkeiten sowas zu erreichen. Hängt davon ab was du genau vor hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462806</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 06 Aug 2015 14:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 15:08:44 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig gesehen habe, gibts das enable_if erst seit VS2010, dann gehts eh nicht und ich krieg auch nen Fehler</p>
<p>&quot;error C4519: Standardvorlagenargumente sind nur für eine Klassenvorlage zulässig..&quot;</p>
<p>ich hab ja schon probiert, was zu konstruieren ala</p>
<pre><code>template&lt;int typ&gt; class A
{
public:
	A(){}
    A(int a, int b);

	int m;
};

template&lt;&gt; A&lt;5&gt;::A(int a, int b)
{
	m = a*b;
}

int main()
{
    //A&lt;1&gt; eins(1,2); Fehler
    A&lt;5&gt; zwei(1,2);
}
</code></pre>
<p>Funktionieren tuts, aber obs schön ist ?<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462814</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Thu, 06 Aug 2015 15:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 16:03:54 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>Wenn ich das richtig gesehen habe, gibts das enable_if erst seit VS2010, dann gehts eh nicht und ich krieg auch nen Fehler</p>
</blockquote>
<p>Ach Gott, du bist noch mit VS2008 oder noch früher unterwegs? Kann oder willst du nicht mal auf etwas neueres umsteigen?</p>
<p>CatDog11 schrieb:</p>
<blockquote>
<p>Funktionieren tuts, aber obs schön ist ?</p>
</blockquote>
<p>Nein schön ist was anderes. Du hast jetzt den Konstruktor mit zwei Parametern nur für typ = 5 definiert. Daher gibts beim Compilieren dann auch einen Linker Fehler und keinen vom Compiler. Eine andere Möglichkeit wäre noch sowas (geht sogar mit VS2010, früher kann ich nicht testen):</p>
<pre><code>template&lt;int typ&gt; class A
{
public:
  A() {}
  int m;
};

template&lt;&gt; class A&lt;5&gt;
{
public:
  A(int a, int b) {}
};

int main()
{
  A&lt;1&gt; eins(1,2);
  A&lt;5&gt; zwei(1,2);
}
</code></pre>
<p>Hier ist A&lt;5&gt; jetzt eine Spezialisierung von A. Dies hat allerdings den Nachteil, dass A&lt;5&gt; nichts von der allgemeinen A Klasse übernimmt. Also hat A&lt;5&gt; auch keine Membervariable m. Man könnte aber eine Basisklasse definieren in der alle gemeinsame Funktionen und Member liegen. Hängt wieder davon ab was du überhaupt zu erreichen versuchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462824</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 06 Aug 2015 16:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 16:08:18 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>Wenn ich das richtig gesehen habe, gibts das enable_if erst seit VS2010,</p>
</blockquote>
<p>also noch mit vc6 unterwegs?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462825</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 06 Aug 2015 16:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 16:15:03 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>&quot;error C4519: Standardvorlagenargumente sind nur für eine Klassenvorlage zulässig..&quot;</p>
</blockquote>
<p>Default Template Arguments für Funktionen sind erst seit C++11 erlaubt und in VS erst mit Version 2013 unterstützt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462827</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Thu, 06 Aug 2015 16:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Thu, 06 Aug 2015 16:47:38 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>CatDog11 schrieb:</p>
<blockquote>
<p>Wenn ich das richtig gesehen habe, gibts das enable_if erst seit VS2010,</p>
</blockquote>
<p>also noch mit vc6 unterwegs?</p>
</blockquote>
<p>Hier gabs mal einen der - angeblich - mit (IIRC) GCC 2.9.3 unterwegs war. Das wolltest du nicht einmal glauben. <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/2462833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462833</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 06 Aug 2015 16:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Fri, 07 Aug 2015 05:31:48 GMT]]></title><description><![CDATA[<p>Ich habe auch ne neue Entwicklungsumgebung im Einsatz, muss aber zum Teil c++/cli dlls erstellen basierend auf .Net 2.0 und da kommt eben VS2008 wieder ins Spiel. Oder kann ich das umgehen irgendwie ?</p>
<p>Das der oben aufgeführte Konstruktor nur für einen Typ funktioniert, wäre ja sogar richtig. Eigentlich könnte ich auch eine Basisklasse schreiben und von der ableiten, aber nachdem sich die Klassen bis auf die Initialisierung nicht unterscheiden, wollt ich eben mal sowas ausprobieren. Vielleicht gibts ja aber auch noch andere Möglichkeiten für so ein Szenario.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462924</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Fri, 07 Aug 2015 05:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Fri, 07 Aug 2015 08:27:58 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>Ich habe auch ne neue Entwicklungsumgebung im Einsatz, muss aber zum Teil c++/cli dlls erstellen basierend auf .Net 2.0 und da kommt eben VS2008 wieder ins Spiel. Oder kann ich das umgehen irgendwie ?</p>
</blockquote>
<p>Ich hab zwar kaum Ahnung von CLI aber ich kann bei VS2015 immer noch .NET 2.0 auswählen (hoffentlich nicht nur weil ich VS2010 noch parallel installiert habe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462935</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Fri, 07 Aug 2015 08:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung on Fri, 07 Aug 2015 09:41:59 GMT]]></title><description><![CDATA[<p>Framwork Auswählen ? Bei C-Sharp oder VB kann ich das Framework auswählen, aber bei c++/cli doch nicht oder lieg ich da falsch ? Ich weiss nur, daß man es handisch in der Projektdatei ändern kann, aber selbst dann muss es mit doch mit dem Platform Toolset zusammenpassen oder nicht ?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2462939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2462939</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Fri, 07 Aug 2015 09:41:59 GMT</pubDate></item></channel></rss>