<?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[Teamplate-Problem]]></title><description><![CDATA[<p>Ich hätte gerne eine Funktion, welche eine Summen-Reduktion ausführt.<br />
Als Template wöllte ich zum einen den Typ der Zahlen (also double oder int ...)<br />
und zum anderen einen Containertypen, der übergeben wird.</p>
<p>Also grob:</p>
<pre><code>T sum(Container a)
{
  for( a::iterator i = a.begin ; i != end ; i++)
    summiere;
  return sum;
</code></pre>
<p>Ich scheitere daran, den Containertypen als Template anzugeben.</p>
<p>Wenn ich mich zB auf Vector festlege, würde das hier gehen:</p>
<pre><code>template &lt;typename T&gt;
T sum(const vector&lt;T&gt;&amp; v)
{
  T sum = 0;
  for(typename vector&lt;T&gt;::const_iterator iter = v.begin(); iter != v.end(); iter++)
  {
    sum = sum + *iter;
  }
  return sum;
}
</code></pre>
<p>Nun möchte ich noch den Container-Typen freilassen. Wie ginge das dann?</p>
<p>Nebenbei: Wieso genau brauche ich (einfach erklärt) das typename<br />
in typename vector&lt;T&gt;::iterator?<br />
Nimmt der Compiler ansonsten an, dass es sich um eine Member-Variable handelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325660/teamplate-problem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 03:50:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325660.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 May 2014 15:07:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Teamplate-Problem on Mon, 12 May 2014 15:07:22 GMT]]></title><description><![CDATA[<p>Ich hätte gerne eine Funktion, welche eine Summen-Reduktion ausführt.<br />
Als Template wöllte ich zum einen den Typ der Zahlen (also double oder int ...)<br />
und zum anderen einen Containertypen, der übergeben wird.</p>
<p>Also grob:</p>
<pre><code>T sum(Container a)
{
  for( a::iterator i = a.begin ; i != end ; i++)
    summiere;
  return sum;
</code></pre>
<p>Ich scheitere daran, den Containertypen als Template anzugeben.</p>
<p>Wenn ich mich zB auf Vector festlege, würde das hier gehen:</p>
<pre><code>template &lt;typename T&gt;
T sum(const vector&lt;T&gt;&amp; v)
{
  T sum = 0;
  for(typename vector&lt;T&gt;::const_iterator iter = v.begin(); iter != v.end(); iter++)
  {
    sum = sum + *iter;
  }
  return sum;
}
</code></pre>
<p>Nun möchte ich noch den Container-Typen freilassen. Wie ginge das dann?</p>
<p>Nebenbei: Wieso genau brauche ich (einfach erklärt) das typename<br />
in typename vector&lt;T&gt;::iterator?<br />
Nimmt der Compiler ansonsten an, dass es sich um eine Member-Variable handelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398836</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Mon, 12 May 2014 15:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Teamplate-Problem on Mon, 12 May 2014 15:20:21 GMT]]></title><description><![CDATA[<p>Die Funktion gibts schon in besser: std::accumulate. Besser ist insbesondere, dass Iteratoren statt Container benutzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398842</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 12 May 2014 15:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to Teamplate-Problem on Mon, 12 May 2014 15:29:50 GMT]]></title><description><![CDATA[<p>Danke, aber mir geht es nicht um eine gute Implementierung, sondern darum, es überhaupt umzusetzen, und halt genau so.</p>
<p>Deswegen ja auch das einfache Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398843</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Mon, 12 May 2014 15:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Teamplate-Problem on Mon, 12 May 2014 16:00:59 GMT]]></title><description><![CDATA[<pre><code>template&lt;typename Container&gt;
typename Container::value_type accumulate_range( Container&amp;&amp; c ) 
{
    typename Container::value_type rval{};

    for( auto const&amp; value : c )
        rval += value;

    return rval;
}
</code></pre>
<p>Kann man dann noch für Arrays verallgemeinern (per <code>iterator_traits</code> und <code>std::begin</code> ).</p>
<blockquote>
<p>Wieso genau brauche ich (einfach erklärt) das typename<br />
in typename vector&lt;T&gt;::iterator?</p>
</blockquote>
<p>Hier klicken: <a href="http://bit.ly/1oIMU5l" rel="nofollow">http://bit.ly/1oIMU5l</a><br />
Gleich der erste Link.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398850</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 12 May 2014 16:00:59 GMT</pubDate></item></channel></rss>