<?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[klassentemplate partiell spezialisieren]]></title><description><![CDATA[<p>hi^^</p>
<p>geht so was mit C++ nicht:</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct X
{
	template&lt;typename A&gt;
	X(A i, A e);
};

template&lt;typename T&gt;
template&lt;typename A&gt;
X&lt;T, int&gt;::X(A i, A e)
{}

int main()
{}
</code></pre>
<p>?</p>
<p>msvc schrieb:</p>
<blockquote>
<p>`error C3860: template argument list following class template name must list parameters in the order used in template parameter list</p>
<p>error C2976: 'X&lt;T,U&gt;' : too few template arguments`</p>
</blockquote>
<p>wie hab ich denn die fehlermeldung an sich schon zu verstehen?</p>
<p>Falls es wirklich nicht geht - wie sähe der workaround aus?</p>
<p>danke scho mal,<br />
bb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254480/klassentemplate-partiell-spezialisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 14:45:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254480.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Nov 2009 00:42:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 00:43:13 GMT]]></title><description><![CDATA[<p>hi^^</p>
<p>geht so was mit C++ nicht:</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct X
{
	template&lt;typename A&gt;
	X(A i, A e);
};

template&lt;typename T&gt;
template&lt;typename A&gt;
X&lt;T, int&gt;::X(A i, A e)
{}

int main()
{}
</code></pre>
<p>?</p>
<p>msvc schrieb:</p>
<blockquote>
<p>`error C3860: template argument list following class template name must list parameters in the order used in template parameter list</p>
<p>error C2976: 'X&lt;T,U&gt;' : too few template arguments`</p>
</blockquote>
<p>wie hab ich denn die fehlermeldung an sich schon zu verstehen?</p>
<p>Falls es wirklich nicht geht - wie sähe der workaround aus?</p>
<p>danke scho mal,<br />
bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809137</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 17 Nov 2009 00:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 00:49:56 GMT]]></title><description><![CDATA[<p>gcc meckert, daß die klasse X&lt;T, int&gt; noch nicht definiert ist.</p>
<p>das da compiliert</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct X
{
    template&lt;typename A&gt;
    X(A i, A e);
};
template&lt;typename T&gt;
struct X&lt;T,int&gt;
{
    template&lt;typename A&gt;
    X(A i, A e);
};

template&lt;typename T&gt;
template&lt;typename A&gt;
X&lt;T, int&gt;::X(A i, A e)
{}

int main()
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1809139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809139</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 17 Nov 2009 00:49:56 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 01:02:56 GMT]]></title><description><![CDATA[<p>hmm.. das compiliert der msvc auch...</p>
<p>aber das stinkt doch - da muss ich ja scho wieder voll viel mehr schreiben (entweder den code kopieren, der immer gleich bleibt oder ne basis-klasse schreiben und von der erben!? -.-)</p>
<p>Der Hintergrund ist, dass es um Typkonversation geht und bestimmte Fkt. immer da sind, die implemtierung hängt aber vom zweiten Parameter ab</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

enum frequency
{
	every
	, every_second
/*	...*/
};

template&lt;typename T, frequency U&gt;
struct X
{
	std::vector&lt;T&gt; tmp;
	typedef typename std::vector&lt;T&gt;::const_iterator const_iterator;

	template&lt;typename InputIterator&gt;
	X(InputIterator i, InputIterator e);

	const_iterator begin() const
	{
		return tmp.begin();
	}
	const_iterator end() const
	{
		return tmp.end();
	}
};

template&lt;typename T&gt;
template&lt;typename InputIterator&gt;
X&lt;T, every&gt;::X(InputIterator i, InputIterator e)
:  tmp(i, e)
{}

template&lt;typename T&gt;
template&lt;typename InputIterator&gt;
X&lt;T, every_second&gt;::X(InputIterator i, InputIterator e)
{
  for(; i != e; ++i, ++i)
  {
    tmp.push_back(*i);
  }
}

int main()
{
	std::vector&lt;int&gt; bla(1, 9);

	X&lt;long long, every&gt; x(bla.begin(), bla.end());
}
</code></pre>
<p>mal angenommen, es geht wirklich nicht so, wie ich das will...<br />
wäre die basisklasse und erben die alternative oder gibts da was tolleres?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809142</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 17 Nov 2009 01:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 01:16:18 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>aber das stinkt doch - da muss ich ja scho wieder voll viel mehr schreiben (entweder den code kopieren, der immer gleich bleibt oder ne basis-klasse schreiben und von der erben!? -.-)</p>
</blockquote>
<p>oder weiterleiten. du wolltest ja eh so eine copy_frequency-funktion basteln.</p>
<pre><code class="language-cpp">template&lt;typename T, frequency U&gt;
struct X
{
    std::vector&lt;T&gt; tmp;
    typedef typename std::vector&lt;T&gt;::const_iterator const_iterator;

    template&lt;typename InputIterator&gt;
    X(InputIterator i, InputIterator e)
    {
       copy_frequency(i,e,U,back_inserter(tmp));
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1809143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809143</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 17 Nov 2009 01:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 12:34:54 GMT]]></title><description><![CDATA[<p>Aber so ist es doch genau noch so!?<br />
Ich habe wieder ein äußeres template, was ich partiell spezialisieren möchte und ein inneres.<br />
Ne freie Fkt kommt auch nich in Frage, weil man die nicht partiell spezialisieren kann!?</p>
<p>ich nahm mal an, du meinst so was hier:</p>
<pre><code class="language-cpp">#include &lt;iterator&gt;
#include &lt;vector&gt;

enum frequency
{
	every
	, every_second
/*	...*/
};

template&lt;typename T, frequency U&gt;
struct X
{
	std::vector&lt;T&gt; tmp;
	typedef typename std::vector&lt;T&gt;::const_iterator const_iterator;

	template&lt;typename InputIterator, typename BackInserterIterator&gt;
	void copy_frequency(InputIterator i, InputIterator e, BackInserterIterator b);

	template&lt;typename InputIterator&gt;
	X(InputIterator i, InputIterator e)
	{
		copy_frequency(i, e, std::back_inserter(tmp));
	}

	const_iterator begin() const
	{
		return tmp.begin();
	}
	const_iterator end() const
	{
		return tmp.end();
	}
};

template&lt;typename T&gt;
template&lt;typename InputIterator, typename BackInserterIterator&gt;
void X&lt;T, every&gt;::copy_frequency&lt;InputIterator, BackInserterIterator&gt;(InputIterator i, InputIterator e, BackInserterIterator b)
{//	lnk-error -&gt; findet die implementierung dieser fkt hier nicht
	for(; i != e; ++i)
		*b++ = *i;
}

template&lt;typename T&gt;
template&lt;typename InputIterator, typename BackInserterIterator&gt;
void X&lt;T, every&gt;::copy_frequency(InputIterator i, InputIterator e, BackInserterIterator b)
{//	selber fehler wie davor (template argument list following class template name must list parameters in the order used in template parameter list)
	for(; i != e; ++i)
		*b++ = *i;
}

#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;list&gt;

void wait()
{
	std::cin.clear();
	std::cin.ignore(std::cin.rdbuf()-&gt;in_avail());
	std::cin.get();
}

int main()
{
	std::list&lt;int&gt; bla(1, 9);

	X&lt;long long, every&gt; x(bla.begin(), bla.end());

	std::copy(x.begin(), x.end(), std::ostream_iterator&lt;long long&gt;(std::cout, &quot;, &quot;));
	std::cout &lt;&lt; std::endl;

	wait();
}
</code></pre>
<p>aber keine der beiden varianten geht - die fehler stehen als kommentar in den fkt. an sich - hab ich dich falsch verstanden?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809338</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 17 Nov 2009 12:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 14:37:44 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>hab ich dich falsch verstanden?</p>
</blockquote>
<p>Ja, copy_frequency meinte ich als globale Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809416</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 17 Nov 2009 14:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 15:39:38 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>hab ich dich falsch verstanden?</p>
</blockquote>
<p>Ja, copy_frequency meinte ich als globale Funktion.</p>
</blockquote>
<p>und dann halt nen <code>switch(frequency_value)</code> !?<br />
(da man fkt. ja noch immer nicht partiell spezialisieren kann)<br />
sieht für mich aber ein wenig unelegant aus...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809418</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 17 Nov 2009 15:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 16:23:49 GMT]]></title><description><![CDATA[<p>Dann mach eine Hilfsklasse die nur copy_frequency als statische Funktion bereitstellt. Die kannst du dann partiell spezialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809481</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 17 Nov 2009 16:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to klassentemplate partiell spezialisieren on Tue, 17 Nov 2009 16:26:29 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Dann mach eine Hilfsklasse die nur copy_frequency als statische Funktion bereitstellt. Die kannst du dann partiell spezialisieren.</p>
</blockquote>
<p>jo, so mach ichs jz auch^^ ty ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809482</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 17 Nov 2009 16:26:29 GMT</pubDate></item></channel></rss>