<?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[Templates]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe eine generische Smartpointer-Klasse und eine generische Klasse für einen Ringpuffer.</p>
<pre><code class="language-cpp">//Smartpointer
template&lt;class T&gt; class CSmartPtr
{
};

//Ringpuffer
template&lt;class T, unsigned int uiSize&gt; class CBuffer
{
};
</code></pre>
<p>Bis dahin is alles in bester Ordnung. Jetzt möchte ich einen Smartpointer auf ein Ringpufferobjekt zeigen lassen:</p>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf;
</code></pre>
<p>Auch das geht. Wenn ich aber jetzt aber folgendes mache, bekomme ich einen Fehler vom Compiler:</p>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf = new CBuffer();
</code></pre>
<p>Ich möchte das Pufferobjekt in dieser Zeile mit new anlegen, es funktioniert aber offensichtlich nicht.</p>
<p>CSmartPtr und CBuffer sollen aber möglichst datentypunabhängig bleiben.</p>
<p>Weiß jemand, wie ich aus dieser Misere rauskomme?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255163/templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 05:44:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255163.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Nov 2009 16:30:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates on Thu, 26 Nov 2009 16:30:21 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe eine generische Smartpointer-Klasse und eine generische Klasse für einen Ringpuffer.</p>
<pre><code class="language-cpp">//Smartpointer
template&lt;class T&gt; class CSmartPtr
{
};

//Ringpuffer
template&lt;class T, unsigned int uiSize&gt; class CBuffer
{
};
</code></pre>
<p>Bis dahin is alles in bester Ordnung. Jetzt möchte ich einen Smartpointer auf ein Ringpufferobjekt zeigen lassen:</p>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf;
</code></pre>
<p>Auch das geht. Wenn ich aber jetzt aber folgendes mache, bekomme ich einen Fehler vom Compiler:</p>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf = new CBuffer();
</code></pre>
<p>Ich möchte das Pufferobjekt in dieser Zeile mit new anlegen, es funktioniert aber offensichtlich nicht.</p>
<p>CSmartPtr und CBuffer sollen aber möglichst datentypunabhängig bleiben.</p>
<p>Weiß jemand, wie ich aus dieser Misere rauskomme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813871</guid><dc:creator><![CDATA[SuperAdmin]]></dc:creator><pubDate>Thu, 26 Nov 2009 16:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to Templates on Thu, 26 Nov 2009 16:48:11 GMT]]></title><description><![CDATA[<p>SuperAdmin schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf = new CBuffer();
</code></pre>
<p>Ich möchte das Pufferobjekt in dieser Zeile mit new anlegen, es funktioniert aber offensichtlich nicht.</p>
</blockquote>
<p>Erstmal,<br />
<code>CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt;</code> ist kein C++98,<br />
<code>CSmartPtr&lt;CBuffer&lt;int, 32&gt; &gt;</code> aber schon.</p>
<p>Und zweitens, <code>CBuffer</code> ist ein Klassen-<em>Template</em> und keine Klasse. Du musst die Template-Parameter schon mit angeben, wenn du ein Objekt erzeugen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813886</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 26 Nov 2009 16:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Templates on Thu, 26 Nov 2009 16:46:37 GMT]]></title><description><![CDATA[<p>SuperAdmin schrieb:</p>
<blockquote>
<p>...Wenn ich aber jetzt aber folgendes mache, bekomme ich einen Fehler vom Compiler...</p>
</blockquote>
<p>Toll, und sollen wir dir diese Meldung nun aus der Nase ziehen, oder was?</p>
<p>Wobei ich denke den Fehler zu sehen:</p>
<p>SuperAdmin schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt;&gt; buf = new CBuffer();
</code></pre>
</blockquote>
<pre><code class="language-cpp">CSmartPtr&lt;CBuffer&lt;int, 32&gt; &gt; buf = new CBuffer&lt;int, 32&gt;();
//                       [1]                  [   2   ]
// 1 - Erst mit dem kommenden Standard kannst du hier das Leerzeichen
//     weglassen. Je nach Compiler kann dies sonst als Streamoperator
//     interpretiert werden.
// 2 - CBuffer reicht nicht als Typangabe, da es ein Template ist.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1813887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813887</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 26 Nov 2009 16:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to Templates on Thu, 26 Nov 2009 17:03:31 GMT]]></title><description><![CDATA[<p>OK, funktioniert! Eigentlich logisch, man muss halt nur drauf kommen.^^</p>
<p>Besten Dank für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813900</guid><dc:creator><![CDATA[SuperAdmin]]></dc:creator><pubDate>Thu, 26 Nov 2009 17:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Templates on Thu, 26 Nov 2009 18:26:06 GMT]]></title><description><![CDATA[<p>Um nicht dauernd die Template-Argumente explizit angeben zu müssen, kannst du <code>typedef</code> einsetzen. Typdefinitionen lohnen sich auch für die Wartung: Wenn du plötzlich den Typ leicht abänderst, brauchst du das nur an einer Stelle zu tun und der restliche Code bleibt kompatibel.</p>
<pre><code class="language-cpp">typedef CBuffer&lt;int, 32&gt; IntBuffer; // evtl. auch CSmartPtr
</code></pre>
<p>Übrigens würde ich von impliziter Konvertierung abraten, wenn du dem Smart-Pointer Besitz überträgst, denn diese ist immer fehleranfällig. Dazu müsstest du den Konstruktor <code>explicit</code> machen. Das nur so am Rande. <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/1813939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813939</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 26 Nov 2009 18:26:06 GMT</pubDate></item></channel></rss>