<?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[Zeiger auf Template-Funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>der Code und die Überschrift sagen schon aus, was ich machen will. Nämlich die Funktion &quot;func1&quot; über den Zeiger &quot;func_ptr&quot; ansprechen. Prinzipiell ist das auch kein Problem, sobald aber Templates ins Spiel kommen, weiß ich mir nicht mehr zu helfen. Kann mir einer die Lösung verraten? <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>
<pre><code class="language-cpp">template&lt;class A&gt;
A func1(A x) {return x;}

template&lt;class A&gt;
A (*func_ptr)(A);

int main() {
	func_ptr = &amp;func1;
	(*func_ptr)(2);
}
</code></pre>
<p>Danke,<br />
~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201597/zeiger-auf-template-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 02:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201597.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Jan 2008 21:40:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Tue, 01 Jan 2008 21:42:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>der Code und die Überschrift sagen schon aus, was ich machen will. Nämlich die Funktion &quot;func1&quot; über den Zeiger &quot;func_ptr&quot; ansprechen. Prinzipiell ist das auch kein Problem, sobald aber Templates ins Spiel kommen, weiß ich mir nicht mehr zu helfen. Kann mir einer die Lösung verraten? <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>
<pre><code class="language-cpp">template&lt;class A&gt;
A func1(A x) {return x;}

template&lt;class A&gt;
A (*func_ptr)(A);

int main() {
	func_ptr = &amp;func1;
	(*func_ptr)(2);
}
</code></pre>
<p>Danke,<br />
~moagnus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428990</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Tue, 01 Jan 2008 21:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Tue, 01 Jan 2008 22:39:08 GMT]]></title><description><![CDATA[<p>Ich befürchte mit templates wird das so nicht gehen.<br />
Eigentlich interpretiere ich ein template ehr als eine Art Macro.</p>
<p>Ein template wird für jede übergebene Klasse neu expantierd und compiliert.</p>
<p>Das Problem ist dann folglich das es mehrere func1 Funktionen in deinem Programm geben kann und der Pointer demzufolge nicht wissen kann was dann gemeint ist.</p>
<p>Obs da eine Lösung gibt weiß ich nicht, aber wenn es da eine Chance geben soll dann müste die übergebene Klasse mit rein.</p>
<p>Vielleicht irgendwie über ein typedef.</p>
<p>Babbage</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429005</guid><dc:creator><![CDATA[Babbage]]></dc:creator><pubDate>Tue, 01 Jan 2008 22:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Tue, 01 Jan 2008 23:27:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Dein Problem ist, dass es nur Klassen- und Funktionstemplates gibt. Was Du aber möchtest, ist ein &quot;Objekttemplate&quot;, denn dies hier:</p>
<p>moagnus schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">A (*func_ptr)(A);
</code></pre>
</blockquote>
<p>soll ja weder eine Klasse noch eine Funktion, sondern ein konkretes Objekt (hier vom Typ &quot;Funktion mit Parameter- und ReturnTyp A&quot;) anlegen.</p>
<p>Mein Vorschlag: Mach eine Klasse draus:</p>
<pre><code class="language-cpp">template &lt;typename A&gt;
struct MyFunc {
   static A (*func_ptr)(A);
};

int main() {
    MyFunc&lt;A&gt;::func_ptr = &amp;func1;
    (*MyFunc&lt;A&gt;::func_ptr)(2);
}
</code></pre>
<p>Das müsste gehen (kann es aber gerade nicht ausprobieren.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429022</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 01 Jan 2008 23:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Wed, 02 Jan 2008 00:00:43 GMT]]></title><description><![CDATA[<p>Hm, jetzt werden halt mehrere Klassen für verschiedene Datentypen angelegt. Das machts leider auch nicht eindeutiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429036</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Wed, 02 Jan 2008 00:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Wed, 02 Jan 2008 02:57:23 GMT]]></title><description><![CDATA[<p>Hallo moagnus,</p>
<p>entweder du mußt dir in der Funktion bereits über dem Typ im Klaren sein<br />
(was du wegen deiner Parameter-Angabe scheinbar bist):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
template&lt;class A&gt; A func1(A x) {return x;} 

int main() { 
    typedef int (*func_ptr)(int);
    func_ptr ptr = &amp;func1; 
    std::cout &lt;&lt; ptr(2) &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>oder deine Funktion muss wiederum eine Template-Funktion sein und den Parameter<br />
woanders her kriegen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

template&lt;class A&gt; A func1(A x) {return x;} 

template&lt;class A&gt; void print(A a) { 
    typedef A (*func_ptr)(A);
    func_ptr ptr = &amp;func1; 
    std::cout &lt;&lt; ptr(a) &lt;&lt; std::endl; 
};

int main() {
    print&lt;int&gt;(2);
    print&lt;char&gt;('c');
    return 0;
}
</code></pre>
<p>Diese beiden Möglichkeiten, kann ich dir vorschlagen.</p>
<p>Falls du noch was anderes brauchst, poste einfach nochmal.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429060</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 Jan 2008 02:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Wed, 02 Jan 2008 09:38:39 GMT]]></title><description><![CDATA[<p>moagnus schrieb:</p>
<blockquote>
<p>Hm, jetzt werden halt mehrere Klassen für verschiedene Datentypen angelegt. ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich weiß nicht, was Du erwartest ... einen Zeiger, der typsicher auf alle Typen zeigen kann ?<br />
Das wird so nicht klappen ... jedenfalls nicht mit templates, weil templates IMMER pro Typ instantiiert werden. Das bedeutet: Selbst wenn Dein ursprüngliches Konstrukt funktionierte, würde es ebenfalls &quot;... mehrere [Zeiger] für verschiedene Datentypen ...&quot; anlegen.</p>
<p>Entweder lebst Du also mit der &quot;Vielfältigkeit&quot; (denn es ist zwar &quot;vielfältig&quot; aber durchaus &quot;eindeutig&quot;, sonst bekäme der Compiler das auch nicht hin) oder Du verabschiedest Dich von der Typsicherheit und hantierst mit void*-Funktionspointern herum, die Du bei Bedarf castest. Letztlich wirst Du aber auch hier nicht darum herumkommen, weil Du spätestens beim Zugriff selbst qualifizieren musst (C++ besteht nunmal darauf, nicht auf void zugreifen zu können) .... und da hast Du wieder eine &quot;Instanz&quot; pro Typ.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429133</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 02 Jan 2008 09:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Template-Funktion on Wed, 02 Jan 2008 15:36:23 GMT]]></title><description><![CDATA[<p>Die zweite Lösung von CSpille gefällt mir ganz gut. Auf das Gecaste verzichte ich jetzt mal, zumal mein Problem eher hypothetisch war.</p>
<p>Danke für eure Antworten. <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/1429404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429404</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Wed, 02 Jan 2008 15:36:23 GMT</pubDate></item></channel></rss>