<?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[Frage zu Zeigern als Template-Parameter]]></title><description><![CDATA[<p>Servus zusammen!<br />
Warum darf ich, wenn ich z.B. eine Funktion mit dem folgenden Prototyp habe:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt; void foo();
</code></pre>
<p>nur die Adresse eines Objektes mit externem Linkage als Argument verwenden?</p>
<p>Außerdem: Mein Compiler (g++ afaik version 3.3x) meckert über folgenden Code:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt;
void foo() { cout &lt;&lt; &quot;*x = &lt;&quot; &lt;&lt; *x &lt;&lt; &quot;&gt;\n&quot;; }

size_t* p = new size_t(9);

int main()
{
  foo&lt;p&gt;();
  delete p;
}
</code></pre>
<p>Nicht jedoch über den folgenden:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt;
void foo() { cout &lt;&lt; &quot;*x = &lt;&quot; &lt;&lt; *x &lt;&lt; &quot;&gt;\n&quot;; }

size_t p = 9;

int main()
{
  foo&lt;&amp;p&gt;();
}
</code></pre>
<p>Was macht es denn für einen Unterschied, ob ich den Wert eines Zeigers mit externe Linkage oder die Adresse eines Objektes mit externe Linkage als Template für foo() verwende? Compiler-bug?</p>
<p>Ich hoffe das ihr mir sagen könnt, was warum wie ist und wo ich meine Verständnisprobleme habe. :).</p>
<p>Und Btw: Ich hab irgendwie das Gefühl, dass das keine so tolle Lösung ist, nur um einem Template ein Argument zu übergeben, dass nicht (unbedingt) zur compile-Zeit feststeht. Gibt es schönere Alternativen? Wenn ja, welche?</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124106/frage-zu-zeigern-als-template-parameter</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 21:03:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124106.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Oct 2005 21:25:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Sun, 23 Oct 2005 21:25:51 GMT]]></title><description><![CDATA[<p>Servus zusammen!<br />
Warum darf ich, wenn ich z.B. eine Funktion mit dem folgenden Prototyp habe:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt; void foo();
</code></pre>
<p>nur die Adresse eines Objektes mit externem Linkage als Argument verwenden?</p>
<p>Außerdem: Mein Compiler (g++ afaik version 3.3x) meckert über folgenden Code:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt;
void foo() { cout &lt;&lt; &quot;*x = &lt;&quot; &lt;&lt; *x &lt;&lt; &quot;&gt;\n&quot;; }

size_t* p = new size_t(9);

int main()
{
  foo&lt;p&gt;();
  delete p;
}
</code></pre>
<p>Nicht jedoch über den folgenden:</p>
<pre><code class="language-cpp">template &lt;size_t* x&gt;
void foo() { cout &lt;&lt; &quot;*x = &lt;&quot; &lt;&lt; *x &lt;&lt; &quot;&gt;\n&quot;; }

size_t p = 9;

int main()
{
  foo&lt;&amp;p&gt;();
}
</code></pre>
<p>Was macht es denn für einen Unterschied, ob ich den Wert eines Zeigers mit externe Linkage oder die Adresse eines Objektes mit externe Linkage als Template für foo() verwende? Compiler-bug?</p>
<p>Ich hoffe das ihr mir sagen könnt, was warum wie ist und wo ich meine Verständnisprobleme habe. :).</p>
<p>Und Btw: Ich hab irgendwie das Gefühl, dass das keine so tolle Lösung ist, nur um einem Template ein Argument zu übergeben, dass nicht (unbedingt) zur compile-Zeit feststeht. Gibt es schönere Alternativen? Wenn ja, welche?</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899637</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Sun, 23 Oct 2005 21:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Sun, 23 Oct 2005 21:58:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum darf ich, wenn ich z.B. eine Funktion mit dem folgenden Prototyp habe[...]nur die Adresse eines Objektes mit externem Linkage als Argument verwenden?</p>
</blockquote>
<p>der compiler kennt nur die addresse von objekten mit external linkage. afair werden die addressen von allen anderen objekten erst vom linker festgelegt.</p>
<pre><code class="language-cpp">size_t* p = new size_t(9);
</code></pre>
<p>dieser ausdruck ist nicht compilezeit konstant, und kann deshalb leider auch nicht verwendet werden(bei jedem programmstart kann p einen anderen wert haben. das ist natürlich schlecht für eine compilezeit konstante ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899651</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 23 Oct 2005 21:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Sun, 23 Oct 2005 22:00:16 GMT]]></title><description><![CDATA[<p>Caipi schrieb:</p>
<blockquote>
<p>Ich hoffe das ihr mir sagen könnt, was warum wie ist und wo ich meine Verständnisprobleme habe. :).</p>
</blockquote>
<p>Deine Funktion kann nicht zur Compile-Zeit instanziiert werden da p nicht konstant ist.</p>
<p>Caipi schrieb:</p>
<blockquote>
<p>Und Btw: Ich hab irgendwie das Gefühl, dass das keine so tolle Lösung ist, nur um einem Template ein Argument zu übergeben, dass nicht (unbedingt) zur compile-Zeit feststeht. Gibt es schönere Alternativen? Wenn ja, welche?</p>
</blockquote>
<p>Kann es sein dass du gar nicht erwähnt hast was du eigentlich machen willst.. oder hab ich's nur überlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899652</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sun, 23 Oct 2005 22:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Sun, 23 Oct 2005 22:12:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a> und finix: Uuups... Jetzt wo ihr es sagt... Danke euch beiden! (Wie konnte mir das nur entgehen... *grml*...).</p>
<p>finix schrieb:</p>
<blockquote>
<p>Caipi schrieb:</p>
<blockquote>
<p>Und Btw: Ich hab irgendwie das Gefühl, dass das keine so tolle Lösung ist, nur um einem Template ein Argument zu übergeben, dass nicht (unbedingt) zur compile-Zeit feststeht. Gibt es schönere Alternativen? Wenn ja, welche?</p>
</blockquote>
<p>Kann es sein dass du gar nicht erwähnt hast was du eigentlich machen willst.. oder hab ich's nur überlesen?</p>
</blockquote>
<p>(*grml* again ;)). Jo. War wohl zu ungenau. Also, ich hab ein paar Template-Funktionen/Klassen, deren Verhalten - wer hätte das gedacht - von den übergebenen Template-Argumenten stark abhängt. Das (eventuelle) Problem hierbei ist, dass ich diese Template-Argumene erst zuf Laufzeit (durch den Benutzer) genau bestimmen kann...</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899654</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Sun, 23 Oct 2005 22:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Sun, 23 Oct 2005 22:26:44 GMT]]></title><description><![CDATA[<p>Caipi schrieb:</p>
<blockquote>
<p>Das (eventuelle) Problem hierbei ist, dass ich diese Template-Argumene erst zuf Laufzeit (durch den Benutzer) genau bestimmen kann...</p>
</blockquote>
<p>Dann sind templates wohl definitiv das Falsche. Wie wär's mit virtuellen Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899660</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 23 Oct 2005 22:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Mon, 24 Oct 2005 17:34:21 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Caipi schrieb:</p>
<blockquote>
<p>Das (eventuelle) Problem hierbei ist, dass ich diese Template-Argumene erst zuf Laufzeit (durch den Benutzer) genau bestimmen kann...</p>
</blockquote>
<p>Dann sind templates wohl definitiv das Falsche. Wie wär's mit virtuellen Funktionen?</p>
</blockquote>
<p>Nope. Virtuelle Funktionen funktionieren hier nicht, da ich, wenn ich diese nutzen würde, noch zu meiner Rente an deren Redefinitionen sitzen würde ;).<br />
Aber danke für deinen Post. Durch ihn habe ich nochmal genauer darüber nachgedacht, was ich eigentlich mache und es jetzt durch eine Änderung des Designs ohne Templates und ohne Polymorphie gelöst.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/900265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/900265</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Mon, 24 Oct 2005 17:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Mon, 24 Oct 2005 17:34:52 GMT]]></title><description><![CDATA[<p>Caipi schrieb:</p>
<blockquote>
<p>Also, ich hab ein paar Template-Funktionen/Klassen, deren Verhalten - wer hätte das gedacht - von den übergebenen Template-Argumenten stark abhängt. Das (eventuelle) Problem hierbei ist, dass ich diese Template-Argumene erst zuf Laufzeit (durch den Benutzer) genau bestimmen kann...</p>
</blockquote>
<p>Also für mich klingt das danach als bräuchtest du eine ganz normale Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/900266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/900266</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Mon, 24 Oct 2005 17:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Zeigern als Template-Parameter on Mon, 24 Oct 2005 17:43:21 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>Caipi schrieb:</p>
<blockquote>
<p>Also, ich hab ein paar Template-Funktionen/Klassen, deren Verhalten - wer hätte das gedacht - von den übergebenen Template-Argumenten stark abhängt. Das (eventuelle) Problem hierbei ist, dass ich diese Template-Argumene erst zuf Laufzeit (durch den Benutzer) genau bestimmen kann...</p>
</blockquote>
<p>Also für mich klingt das danach als bräuchtest du eine ganz normale Funktion.</p>
</blockquote>
<p>Jup. So hab ich es letztendlich dann auch tlw. gemacht. Teilweise ;).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/900272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/900272</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Mon, 24 Oct 2005 17:43:21 GMT</pubDate></item></channel></rss>