<?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-Frage:]]></title><description><![CDATA[<p>Ich will ein Template erstellen, wo einmal ein ListenTyp und andererseits ein Typ für ein Element der Liste getemplated wird:</p>
<pre><code class="language-cpp">template &lt;typename ListenTyp, typename ElementTyp&gt; ListenTyp&lt;ElementTyp&gt; removeEltFromList(ElementTyp elt, ListenTyp&lt;ElementTyp&gt; liste)
</code></pre>
<p>wie geht das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297128/template-frage</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 14:38:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297128.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Dec 2011 17:34:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:34:47 GMT]]></title><description><![CDATA[<p>Ich will ein Template erstellen, wo einmal ein ListenTyp und andererseits ein Typ für ein Element der Liste getemplated wird:</p>
<pre><code class="language-cpp">template &lt;typename ListenTyp, typename ElementTyp&gt; ListenTyp&lt;ElementTyp&gt; removeEltFromList(ElementTyp elt, ListenTyp&lt;ElementTyp&gt; liste)
</code></pre>
<p>wie geht das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158869</guid><dc:creator><![CDATA[huuuuuuu]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:46:11 GMT]]></title><description><![CDATA[<p>Folgendes funktioniert leider nicht:</p>
<pre><code class="language-cpp">template &lt;typename ListType, typename ElementType&gt; inline ListType&lt;ElementType&gt; remove(ElementType elt, const ListType&lt;ElementType&gt;&amp; v1)
{
	ListType result;
	for (const ElementType ListElt: v1)
        if (ListElt != elt)
            result.push_back(ListElt);
	return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2158875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158875</guid><dc:creator><![CDATA[huuuuuuuuuu]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:54:44 GMT]]></title><description><![CDATA[<p>Du willst also, dass das erste kein Typ ist sondern ein template!?</p>
<pre><code class="language-cpp">template &lt;template &lt;typename&gt; ListenTyp, typename ElementTyp&gt; ListenTyp&lt;ElementTyp&gt; removeEltFromList(ElementTyp elt, ListenTyp&lt;ElementTyp&gt; liste)
</code></pre>
<p>Wobei ich es so besser finden würde:</p>
<pre><code class="language-cpp">template &lt;typename ListenTyp&gt; typename ListenTyp::ElementTyp removeEltFromList(typename ListenTyp::ElementTyp elt, ListenTyp&amp; liste)
</code></pre>
<p>Oder analog über Traits. Denn dann beschränkst du die Argumentliste von ListenTyp nicht.<br />
Ich frag mich allerdings warum das keine Memberfunktion deiner Liste ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158876</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:52:30 GMT]]></title><description><![CDATA[<p>Im Prinzip so:</p>
<pre><code class="language-cpp">template&lt;class ElementType, template&lt;class&gt; class ListType&gt;
ListType&lt;ElementType&gt; foo(ElementType, ListType&lt;ElementType&gt;)
</code></pre>
<p>Aber das ist doof, weil das dann nur mit Listentypen mit genau einem Templateparameter funktioniert. Wenn das z.B. mit vector, deque und anderen zweiparametrigen Templates gehen soll, braucht man schon:</p>
<pre><code class="language-cpp">template&lt;class ElementType, template&lt;class, class&gt; class ListType&gt;
ListType&lt;ElementType, std::allocator&lt;ElementType&gt; &gt; foo(ElementType, ListType&lt;ElementType, std::allocator&lt;ElementType&gt; &gt;)
</code></pre>
<p>Du siehst, das ist sehr speziell und der ganze Zweck von Templates geht verloren.</p>
<p>Daher klassisch:</p>
<pre><code class="language-cpp">template &lt;typename ListenTyp, typename ElementTyp&gt; ListenTyp foo(ElementTyp, ListenTyp)
</code></pre>
<p>Außerdem würde ich darüber nachdenken, so einer Funktion eine Schnittstelle mit Iteratoren zu verpassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158877</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:56:10 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Außerdem würde ich darüber nachdenken, so einer Funktion eine Schnittstelle mit Iteratoren zu verpassen.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158878</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 17:57:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename ListenTyp, template &lt;typename&gt; ElementTyp&gt; ListenTyp&lt;ElementTyp&gt; removeEltFromList(const ElementTyp elt, const ListenTyp&lt;ElementTyp&gt;&amp; liste)
{
	ListenTyp&lt;ElementTyp&gt; result;
	for (const ElementTyp ListElt: liste)
        if (ListElt != elt)
            result.push_back(ListElt);
	return result;
}
</code></pre>
<p>Geht irgendwie nicht ... &quot;ListenTyp&quot; is not a template.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158879</guid><dc:creator><![CDATA[huuuuuuuuuu]]></dc:creator><pubDate>Mon, 19 Dec 2011 17:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:09:37 GMT]]></title><description><![CDATA[<p>Guck nochmal genau hin. Oder besser: Versuch zu verstehen, was dir gezeigt wurde. Dann lachst du über den dummen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158892</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:09:37 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:10:35 GMT]]></title><description><![CDATA[<p>typename -&gt; class?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158894</guid><dc:creator><![CDATA[huuuuuuuuuu]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:11:29 GMT]]></title><description><![CDATA[<p>Ich hatte das in meinem ersten Post zuerst versehentlich so rum gemacht, vermutlich hat er den abgetippt bevor ichs editieren konnte <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/2158895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158895</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:12:16 GMT]]></title><description><![CDATA[<p>huuuuuuuuuu schrieb:</p>
<blockquote>
<p>typename -&gt; class?</p>
</blockquote>
<p>Das ist egal. Schau nochmal was genau wir oben geschrieben haben <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/2158896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158896</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:13:06 GMT]]></title><description><![CDATA[<p>huuuuuuuuuu schrieb:</p>
<blockquote>
<p>typename -&gt; class?</p>
</blockquote>
<p>Ähhhh, vielleicht solltest du nochmal mit den Grundlagen von Templates anfangen, bevor du kompliziertere Sachen baust. Da das Thema zu groß für einen Forenbeitrag ist: Buch schnappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158897</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:13:11 GMT]]></title><description><![CDATA[<p>@huuu..<br />
Einer der beiden Templateparameter ist ein Typ, der andere ist selbst ein Template. Jetzt rate mal, was wozu gehört. <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="😉"
    /><br />
PS: Iterator++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158898</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:28:36 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>PS: Iterator++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Falls das immer der gleiche huuuu mit egal wie vielen uuuus ist, noch ein weiterer Tipp: Versuch nicht in C++ Lisp zu programmieren. Das scheitert schon immer grandios, wenn Java-Programmierer in C++ versuchen Java zu programmieren, dabei besteht zwischen Java und C++ zumindest eine gewisse Ähnlichkeit. Das ist in keiner Sprache eine gute Idee, sich von den bewährten Prinzipien weg zu bewegen.<br />
Daher: Die STL ist aus gutem Grund mit Iteratoren implementiert, eben weil der Ansatz den Listentyp als ganzes zu übergeben Mist ist. Du kannst vielleicht noch darüber streiten, ob Iteratoren oder Ranges besser sind. Oder ein ganz neues Prinzip. Aber dazu müssen diese Prinzipien erst einmal mindestens genauso flexibel wie Iteratoren sein, dann kann man darüber reden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158907</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:38:58 GMT]]></title><description><![CDATA[<p>Wobei ich ja so eine Überladung schon nett finden würde:</p>
<pre><code class="language-cpp">template&lt;class Container, class Function&gt;
Function for_each(Container container, Function function)
{
  return for_each(begin(container), end(container), function);
}
</code></pre>
<p>Aber bevor man anfängt mit Templates als Templateparameter rumzuwurschteln.. <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/2158915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158915</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:42:24 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Wobei ich ja so eine Überladung schon nett finden würde:<br />
[...]</p>
</blockquote>
<p>Also die C++11 range-based loops?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158918</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 18:45:46 GMT]]></title><description><![CDATA[<p>Bei Template-Template-Parametern muss es übrigens</p>
<pre><code class="language-cpp">template
&lt;
    template &lt;typename&gt; class foo
    typename bar
&gt;
</code></pre>
<p>heißen, wobei statt des typenames auch class verwendet werden kann. Das class ist allerdings Pflicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158919</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 19 Dec 2011 18:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 19:07:40 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Also die C++11 range-based loops?</p>
</blockquote>
<p>Ok, foreach war vielleicht ein schlechtes Beispiel, weil man das eigentlich eh vergessen kann. (Sobald Microsoft sich mal gnädig zeigt und die range-based Loops dann auch implementiert..)<br />
Aber den anderen Algorithmen würde eine Überladung der man einfach den Container übergeben kann auch nicht schaden.</p>
<p>Statt</p>
<pre><code class="language-cpp">std::remove_if(std::begin(container), std::end(container), [] (const Element &amp;element) { return element.foo(); });
</code></pre>
<p>Kommt dann:</p>
<pre><code class="language-cpp">std::remove_if(container, [] (const Element &amp;element) { return element.foo(); });
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2158938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158938</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 19 Dec 2011 19:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 19:26:31 GMT]]></title><description><![CDATA[<p>Warum nicht gleich konsistent zu for bleiben?</p>
<pre><code class="language-cpp">std::remove_if (const Element&amp; element : container) {
  return element.foo();
}
</code></pre>
<p><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/2158951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158951</guid><dc:creator><![CDATA[forrer]]></dc:creator><pubDate>Mon, 19 Dec 2011 19:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 20:10:29 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">std::begin(container)
  std::end(container)
</code></pre>
</blockquote>
<p>Mal so am Rande: Ich weiß nicht, ob das so eine gute Idee ist, begin/end zu qualifizieren. Bei swap tue ich das jedenfalls nicht, nicht in generischem Code. Mit der Qualifizierung schaltest Du nämlich ADL aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158971</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 19 Dec 2011 20:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to template-Frage: on Mon, 19 Dec 2011 20:55:43 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Mal so am Rande: Ich weiß nicht, ob das so eine gute Idee ist, begin/end zu qualifizieren. Bei swap tue ich das jedenfalls nicht, nicht in generischem Code. Mit der Qualifizierung schaltest Du nämlich ADL aus.</p>
</blockquote>
<p>Ich weiß, so ganz einig bin ich mir auch nicht. Aber Arrays kommen leider nicht aus std::. Alles etwas suboptimal. Operatoren hätten ja nicht geschadet, aber ich glaube das hatten wir sogar schon mal. Ja, genau: <a href="http://www.c-plusplus.net/forum/294688" rel="nofollow">http://www.c-plusplus.net/forum/294688</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158991</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 19 Dec 2011 20:55:43 GMT</pubDate></item></channel></rss>