<?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 bei Funktionszeigern]]></title><description><![CDATA[<p>Hallo, ich hab folgendes Problem:</p>
<p>ich habe mehrere Funktionen, die identisch aufgebaut sind, sich jedoch im Rückgabetyp unterscheiden (sind in verschiedenen Dll hinterlegt, dies nur als Anmerkung).</p>
<pre><code class="language-cpp">int f1(int x); //in DLL1
	double f2(int x); //in DLL2
</code></pre>
<p>Ich würde jetzt gerne mit einem einzigen Funktionspointer arbeiten, den ich ,al auf die eine oder mal die andere Funktion zeigen lasse.</p>
<pre><code class="language-cpp">template&lt;class T&gt; T (*IrgendeineFunction)(int x);
</code></pre>
<p>geht leider nicht.</p>
<p>Mach ich was falsch? Welche Möglichkeiten habe ich?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256208/templates-bei-funktionszeigern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 17:29:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256208.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Dec 2009 16:16:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 16:16:38 GMT]]></title><description><![CDATA[<p>Hallo, ich hab folgendes Problem:</p>
<p>ich habe mehrere Funktionen, die identisch aufgebaut sind, sich jedoch im Rückgabetyp unterscheiden (sind in verschiedenen Dll hinterlegt, dies nur als Anmerkung).</p>
<pre><code class="language-cpp">int f1(int x); //in DLL1
	double f2(int x); //in DLL2
</code></pre>
<p>Ich würde jetzt gerne mit einem einzigen Funktionspointer arbeiten, den ich ,al auf die eine oder mal die andere Funktion zeigen lasse.</p>
<pre><code class="language-cpp">template&lt;class T&gt; T (*IrgendeineFunction)(int x);
</code></pre>
<p>geht leider nicht.</p>
<p>Mach ich was falsch? Welche Möglichkeiten habe ich?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820187</guid><dc:creator><![CDATA[C++Student]]></dc:creator><pubDate>Wed, 09 Dec 2009 16:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 16:35:09 GMT]]></title><description><![CDATA[<p>C++Student schrieb:</p>
<blockquote>
<p>geht leider nicht.</p>
</blockquote>
<p>Na dann ist ja alles klar.</p>
<p>Meinst du vielleicht sowas?</p>
<pre><code class="language-cpp">template&lt;class T&gt; T IrgendeineFunction(int x);

template&lt;&gt; int IrgendeineFunction(int x){
 return f1(x);
}

template&lt;&gt; double IrgendeineFunction(int x){
 return f2(x);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1820195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820195</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Dec 2009 16:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 16:42:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Mach ich was falsch?</p>
</blockquote>
<p>Du versuchst das Unmögliche.</p>
<blockquote>
<p>Welche Möglichkeiten habe ich?</p>
</blockquote>
<p>Viele. Du kannst Dir zB für eine von den zwei Funktionen einen &quot;Wrapper&quot; bauen, damit Du hinterher dieselben Typen hast:</p>
<pre><code class="language-cpp">double f1d(int x) {return f1(x);}

:
:

double (*x)(int) = f1d;
double (*y)(int) = f2;
</code></pre>
<p>Automatische Wrapper, falls Parameter und Returnwert konvertierbar sind, sollten auch mit boost::function funktionieren -- da bin ich mir aber nicht 100%ig sicher im Moment.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820199</guid><dc:creator><![CDATA[senfer]]></dc:creator><pubDate>Wed, 09 Dec 2009 16:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 16:44:05 GMT]]></title><description><![CDATA[<p>Nein, ich will wirklich einen Funktionszeiger haben, der auf eine Funktion zeigt, die ich bis auf den mir unbekannten Rückgabetyp kenne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820203</guid><dc:creator><![CDATA[C++Student]]></dc:creator><pubDate>Wed, 09 Dec 2009 16:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 17:08:34 GMT]]></title><description><![CDATA[<p>C++Student schrieb:</p>
<blockquote>
<p>Nein, ich will wirklich einen Funktionszeiger haben, der auf eine Funktion zeigt, die ich bis auf den mir unbekannten Rückgabetyp kenne.</p>
</blockquote>
<p>Nicht getestet, aber dürfte klappen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt; struct myfunctionpointer{
  static T (*function)(int x);
};

template&lt;&gt; int (*myfunctionpointer&lt;int&gt;::function)(int x)=f1;
template&lt;&gt; double (*myfunctionpointer&lt;double&gt;::function)(int x)=f2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1820219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820219</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Dec 2009 17:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to templates bei Funktionszeigern on Wed, 09 Dec 2009 19:42:37 GMT]]></title><description><![CDATA[<p>C++Student schrieb:</p>
<blockquote>
<p>Nein, ich will wirklich einen Funktionszeiger haben, der auf eine Funktion zeigt, die ich bis auf den mir unbekannten Rückgabetyp kenne.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Was/Wie/Wo/Warum? Mehr Details bitte. Mehr Beispiele bitte. Du kannst natürlich einen Funktionszeiger vom Typ X* nicht auf eine Funktion vom Typ Y zeigen lassen, wenn X!=Y gilt. Wozu sollte man das auch machen können? So, wie Du Deine Frage formulierst (&quot;Ich will einen Funktionszeiger, ... unbekannten Typ&quot;) gibt es klar nur eine Antwort: Geht nicht. Was passt Dir denn an senfers Antwort nicht? Wrapper-Funktionen klingen doch nach 'ner &quot;guten&quot; Idee. (gut in Anführungszeichen, weil sich das, ohne Dein Design zu kennen, schlecht bewerten lässt)</p>
<p>Wrapper deluxe:</p>
<pre><code class="language-cpp">#include &quot;boost/any.hpp&quot;

template&lt;typename Ret, Ret (*Fun)(int)&gt;
struct ladida
{
  static boost::any wrapper(int x) { return Fun(x); }
};

int    f1 (int);
double f2 (int);

int main() {
  boost::any (*zeiger)(int);
  zeiger = ladida&lt;int,f1&gt;::wrapper;
  zeiger(23);
  zeiger = ladida&lt;double,f2&gt;::wrapper;
  zeiger(42);
}
</code></pre>
<p>(ungetestet -- müsste vom Prinzip her gehen)</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820291</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 09 Dec 2009 19:42:37 GMT</pubDate></item></channel></rss>