<?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[Wildcards in Templates]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin relativ neu in C++ und würde gerne etwas wie</p>
<pre><code class="language-java">void foo(Bar&lt;?&gt; bar){}
</code></pre>
<p>verwiklichen.</p>
<p>Mir ist klar, dass es etwas analoges in C++ nicht gibt.</p>
<p>Wie würdet ihr so einen Funktionsaufruf in C++ verwirklichen?</p>
<p>Gruß,<br />
Wildcard</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288022/wildcards-in-templates</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 04:02:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288022.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jun 2011 01:06:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wildcards in Templates on Thu, 09 Jun 2011 01:06:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin relativ neu in C++ und würde gerne etwas wie</p>
<pre><code class="language-java">void foo(Bar&lt;?&gt; bar){}
</code></pre>
<p>verwiklichen.</p>
<p>Mir ist klar, dass es etwas analoges in C++ nicht gibt.</p>
<p>Wie würdet ihr so einen Funktionsaufruf in C++ verwirklichen?</p>
<p>Gruß,<br />
Wildcard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075502</guid><dc:creator><![CDATA[Wildcard...]]></dc:creator><pubDate>Thu, 09 Jun 2011 01:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wildcards in Templates on Thu, 09 Jun 2011 01:57:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
void foo(Bar&lt;T&gt;&amp; bar)
{
}
</code></pre>
<p>Wobei ich eigentlich soweit gehen würde einfach</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void foo(T&amp; bar)
{
}
</code></pre>
<p>zu machen. Dann funktioniert dein foo() nicht nur mit jedem beliebigen Bar sondern überhaupt mit jedem beliebigem Typ der ein entsprechendes Interface bietet. Anmerkung: Wir reden hier nicht von Interface im Sinne des Java Schlüsselwortes sondern generell einfach von der Gesamtheit aller Ausdrücke die der Typ unterstützt. Beispiel:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void foo(T&amp; bar)
{
  bar(10);
}
</code></pre>
<p>Diese Funktion kannst du nun für jedes beliebige T verwenden das wie eine Funktion aufgerufen werden kann (das den Ausdruck bar(10) unterstützt). Es kann sich dabei natürlich um eine Funktion aber z.B. auch um eine Klasse handeln die einen entsprechenden operator() bietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075507</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 09 Jun 2011 01:57:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wildcards in Templates on Thu, 09 Jun 2011 02:03:26 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Die Version klappt solange die Funktion nicht virtuell ist.<br />
Was würdet ihr machen, wenn sie virtuell ist?</p>
<p>Dann geht es ja leider so nicht mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075508</guid><dc:creator><![CDATA[Wildcard...]]></dc:creator><pubDate>Thu, 09 Jun 2011 02:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wildcards in Templates on Thu, 09 Jun 2011 02:17:49 GMT]]></title><description><![CDATA[<p>Ich denke, das geht nicht.</p>
<p>14.5.2.3 schrieb:</p>
<blockquote>
<p>A member function template shall not be virtual.</p>
<pre><code class="language-cpp">template &lt;class T&gt; struct AA {
template &lt;class C&gt; virtual void g(C); // error
virtual void f(); // OK
};
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2075509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075509</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Jun 2011 02:17:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wildcards in Templates on Thu, 09 Jun 2011 07:28:55 GMT]]></title><description><![CDATA[<p>Wildcard... schrieb:</p>
<blockquote>
<p>Die Version klappt solange die Funktion nicht virtuell ist.<br />
Was würdet ihr machen, wenn sie virtuell ist?</p>
</blockquote>
<p>Kommt drauf an. Man kann die Funktion zerlegen und darin virtuelle Funktionen aufrufen, also kann man zumindest den von T unabhänigen Teil virtuell gestalten.</p>
<p>Was willst du erreichen? Es gibt bestimmt ne Lösung. Nur sieht die vermutlich nicht so aus wie in Java, auch nicht so ähnlich. Java-Denken in C++ ist ein schlechter Ansatz, er schränkt dich nur ein <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/2075531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075531</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 09 Jun 2011 07:28:55 GMT</pubDate></item></channel></rss>