<?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[Kurze Frage zu Template-Funktionen]]></title><description><![CDATA[<p>Hi!</p>
<p>Kurze Frage, geht das folgende irgendwie?:</p>
<pre><code class="language-cpp">template&lt;typename container&gt; void foo( container&lt;SomeClass&gt; bla );

std::vector&lt;SomeClass&gt; v;
foo( v );
</code></pre>
<p>Ich will also einfach vorgeben, welche Klasse in &quot;container&quot; eingebettet sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222017/kurze-frage-zu-template-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 11:38:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222017.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Sep 2008 14:11:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:11:42 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Kurze Frage, geht das folgende irgendwie?:</p>
<pre><code class="language-cpp">template&lt;typename container&gt; void foo( container&lt;SomeClass&gt; bla );

std::vector&lt;SomeClass&gt; v;
foo( v );
</code></pre>
<p>Ich will also einfach vorgeben, welche Klasse in &quot;container&quot; eingebettet sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577636</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:21:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>geht es hier nur im die std-Container ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577640</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:23:05 GMT]]></title><description><![CDATA[<p>Würde auf jeden Fall reichen, ja!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577643</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:25:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;template &lt;typename,typename&gt; class container&gt; 
void foo( container&lt;SomeClass, std::allocator&lt;SomeClass&gt; &gt; bla );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1577644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577644</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:25:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:29:01 GMT]]></title><description><![CDATA[<p>template template parameter sind ziemlicher schrott aktuell - denn container der standard library duerfen unendlich viele template argumente nehmen und damit kommen template template argumente nicht klar. im neuen standard wird das deutlich besser...</p>
<p>was du aber jetzt machen kannst ist mit boost::enable_if und is_same&lt;SomeClass, Container::value_type&gt; zu arbeiten.</p>
<p>Edit:<br />
oder auf iteratoren ranges zu operieren - wenn das moeglich ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577646</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:32:48 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;template &lt;typename,typename&gt; class container&gt; 
void foo( container&lt;SomeClass, std::allocator&lt;SomeClass&gt; &gt; bla );
</code></pre>
</blockquote>
<p>Genau das hatte ich gesucht, danke!</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>oder auf iteratoren ranges zu operieren - wenn das moeglich ist...</p>
</blockquote>
<p>Wie meinst du das? Im Zusammenhang mit enable_if/is_same oder als generelle Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577654</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:37:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class Allocator, 
		  template &lt;typename, typename&gt; class Container&gt;
void foo(Container&lt;SomeClass, Allocator&gt; const&amp; c)
{ }
</code></pre>
<p>Hilft aber nur für Container mit 2 Template Parametern. Ich habe mal gehört, dass sie allerdings noch interne Default-Template-Parameter haben dürfen, was das ganze natürlich vollkommen unbrauchbar machen würde. Mal davon abgesehen, dass das für Container mit 3 Argumenten auch nicht funktioniert (std::set, map).</p>
<p>Eventuell kannst du mit boost::enable_if arbeiten?</p>
<pre><code class="language-cpp">template &lt;class Container&gt;
typename boost::enable_if&lt;boost::is_same&lt;typename Container::value_type, SomeClass&gt;, void&gt;::type
bar(Container const&amp; c)
{ }
</code></pre>
<p>Edit: zu spät...</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577657</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:39:18 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;template &lt;typename,typename&gt; class container&gt; 
void foo( container&lt;SomeClass, std::allocator&lt;SomeClass&gt; &gt; bla );
</code></pre>
</blockquote>
<p>Genau das hatte ich gesucht, danke!</p>
</blockquote>
<p>und es ist nicht portabel wie ich bereits gesagt habe.</p>
<blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>oder auf iteratoren ranges zu operieren - wenn das moeglich ist...</p>
</blockquote>
<p>Wie meinst du das? Im Zusammenhang mit enable_if/is_same oder als generelle Lösung?</p>
</blockquote>
<p>als eigene loesung. das was du willst kannst du 1:1 mit enable_if bekommen und bist portabel - template template parameter sind es nicht. enable_if ist hier das richtige.</p>
<p>die frage aber ist, ob du das ganze ueberhaupt brauchst: warum muss es SomeClass sein und darf nichts von SomeClass geerbtes sein? Oder etwas das interface kompatibel ist. Bei vererbung kommt wieder enable_if ins spiel und bei interface kompatibel BOOST_CONCEPT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577662</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:39:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:44:46 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>und es ist nicht portabel wie ich bereits gesagt habe.</p>
</blockquote>
<p>Das hatte ich schon verstanden, trotzdem hatte (Vergangenheit) ich genau das gesucht <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>
<blockquote>
<p>die frage aber ist, ob du das ganze ueberhaupt brauchst: warum muss es SomeClass sein und darf nichts von SomeClass geerbtes sein? Oder etwas das interface kompatibel ist. Bei vererbung kommt wieder enable_if ins spiel und bei interface kompatibel BOOST_CONCEPT</p>
</blockquote>
<p>Es dreht sich da zum Glück nur um ziemlich simple Typen wo garantiert weder Vererbung noch Interface-kompatible Typen drankommen. Aber danke für die Möglichkeiten, vielleicht brauch ich's später noch mal <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/1577668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577668</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:44:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 14:53:46 GMT]]></title><description><![CDATA[<p>Würde das im neuen Standard mit Concepts gelöst oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577671</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 15:01:15 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Es dreht sich da zum Glück nur um ziemlich simple Typen wo garantiert weder Vererbung noch Interface-kompatible Typen drankommen. Aber danke für die Möglichkeiten, vielleicht brauch ich's später noch mal <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>
</blockquote>
<p>Es ist halt eine sinnlose limitierung von generischen code. wenn etwas sich genauso verhaelt wie SomeClass, warum darf ich es dann nicht verwenden wie SomeClass?</p>
<p>Naja, egal. Das wirkliche Problem ist sowieso die template template loesung... Nimm da aber wenigstens Don06s Loesung.</p>
<p>Edit:<br />
Nein im neuen Standard wuerde man das per variadic templates loesen. beim forentreff habe ich mit vinzenz da was gebastelt - eigentlich ich hab gesagt was ich will und vinzenz hats programmiert <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="🤡"
    /> - deshalb hab ich jetzt auch gerade null ahnung von der syntax.</p>
<p>muss aber in etwa sowas gewesen sein:</p>
<pre><code class="language-cpp">template&lt;template&lt;class, class...&gt; class ContainerT, typename... Args&gt;
void foo(ContainerT&lt;SomeClass, Args...&gt; const&amp; c) {
}
</code></pre>
<p>Syntax may vary <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>
<p>Das einzige was dabei das problem ist, ist dass SomeClass der erste template parameter sein muss. Was idR zutrifft, aber 100% perfekt ist es nicht. Was danach kommt ist dank variadic templates egal. Auch wenn nichts nach SomeClass kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577672</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 06 Sep 2008 15:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 16:25:08 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Es ist halt eine sinnlose limitierung von generischen code. wenn etwas sich genauso verhaelt wie SomeClass, warum darf ich es dann nicht verwenden wie SomeClass?</p>
<p>Naja, egal. Das wirkliche Problem ist sowieso die template template loesung... Nimm da aber wenigstens Don06s Loesung.</p>
</blockquote>
<p>Ich bin mittlerweile doch wieder auf <code>template&lt;typename container&gt; void foo( container&amp; )</code> umgeschwenkt, die enable_if/is_same Lösung ist prinzipiell zwar schön, optisch aber leider ein Graus. Und du hast mich mit der Generizität überzeugt, es kompiliert bei Interface-Fremdheit ja sowieso nicht <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>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;template&lt;class, class...&gt; class ContainerT, typename... Args&gt;
void foo(ContainerT&lt;SomeClass, Args...&gt; const&amp; c) {
}
</code></pre>
<p>Syntax may vary <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>
</blockquote>
<p>Sieht schon schicker aus, wenn auch immer noch viel zu tippen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich danke euch <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/1577720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577720</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Sep 2008 16:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Template-Funktionen on Sat, 06 Sep 2008 23:23:53 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Würde das im neuen Standard mit Concepts gelöst oder wie?</p>
</blockquote>
<p>fände ich die schönere lösung.<br />
du definierst ein <code>concept</code> , das aussagt, wie der container aussehen soll - und schwupps*, alle container, die passen, werden akzeptiert; für alle anderen, die die gewünschte funktionalität implementieren, aber deren schnittstelle &quot;falsch&quot; ist, kannst du mit einer <code>concept_map</code> die schnittstelle selbst verbiegen.</p>
<pre><code class="language-cpp">auto concept MyContainer &lt;typename Cont&gt;
{
   typename size_type;
   size_type size (Cont const&amp;);   
};

template &lt;MyContainer c&gt;
void foo (c &amp;);
</code></pre>
<p>bzw. du verwendest die im standard selbst definierten concepts.</p>
<pre><code class="language-cpp">#include &lt;container_concepts&gt;

template &lt;std::BackInsertionContainer Cont&gt;
void foo (Cont&amp;);
</code></pre>
<p>__________________<br />
* nur bei <code>auto concept</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577871</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sat, 06 Sep 2008 23:23:53 GMT</pubDate></item></channel></rss>