<?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[funktionspointer im template typedef definieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>also folgende Situation, ich habe eine Templateklasse. Als Template möchte ich<br />
eine Objektfunktion definieren die entsprechend aufgerufen wird.</p>
<p>Das mache ich ungefähr so:</p>
<pre><code class="language-cpp">template&lt; typename FUNCTION &gt;
class TestKlasse
{
[...]

void Do(FUNCTION func)
{
[..]
OBJECT* y = GetObject();
float x = y-&gt;func();
}
}
</code></pre>
<p>Nun möchte ich ein typedef dieser Templateklasse setzen, der explizit eine Objektfunktion definiert. Und hier habe ich so meine Probleme, da ich nicht weiß wie ich das machen soll (obwohl ich noch nicht mal weiß ob der oben gezeigte Code so funktioniert. Falls nicht würde ich auch gerne wissen wie ich das richtig definieren kann).</p>
<p>Es soll ungefähr so aussehen (was natürlich so nicht stimmt):</p>
<pre><code class="language-cpp">typedef TestKlasse&lt;OBJECT::GetValue()&gt; ValueKlasse;
</code></pre>
<p>Meine Frage ist also, wie kann ich solch eine Funktion eines Objektes im typedef definieren?</p>
<p>Vielen Dank schonmal<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270985/funktionspointer-im-template-typedef-definieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 18:02:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270985.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Jul 2010 13:52:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 13:52:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also folgende Situation, ich habe eine Templateklasse. Als Template möchte ich<br />
eine Objektfunktion definieren die entsprechend aufgerufen wird.</p>
<p>Das mache ich ungefähr so:</p>
<pre><code class="language-cpp">template&lt; typename FUNCTION &gt;
class TestKlasse
{
[...]

void Do(FUNCTION func)
{
[..]
OBJECT* y = GetObject();
float x = y-&gt;func();
}
}
</code></pre>
<p>Nun möchte ich ein typedef dieser Templateklasse setzen, der explizit eine Objektfunktion definiert. Und hier habe ich so meine Probleme, da ich nicht weiß wie ich das machen soll (obwohl ich noch nicht mal weiß ob der oben gezeigte Code so funktioniert. Falls nicht würde ich auch gerne wissen wie ich das richtig definieren kann).</p>
<p>Es soll ungefähr so aussehen (was natürlich so nicht stimmt):</p>
<pre><code class="language-cpp">typedef TestKlasse&lt;OBJECT::GetValue()&gt; ValueKlasse;
</code></pre>
<p>Meine Frage ist also, wie kann ich solch eine Funktion eines Objektes im typedef definieren?</p>
<p>Vielen Dank schonmal<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929614</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Wed, 21 Jul 2010 13:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 14:59:23 GMT]]></title><description><![CDATA[<p>Das geht nicht. Templateparameter können nur Datentypen oder integrale Werte sein. Ein Funktionszeiger ist keines davon.</p>
<p>edit: Ach ja, ein Pointer ist natürlich auch integral. Vergiss was hier stand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929617</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Jul 2010 14:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 14:20:29 GMT]]></title><description><![CDATA[<p>Nun ja, das sollte ja schon gehen à la:</p>
<pre><code class="language-cpp">template&lt;void (*func)(int)&gt;
  struct foo {
     void machWas() { func(42); }
  };

  void eins(int i) { std::cout &lt;&lt; i &lt;&lt; std::endl; }
  void zwei(int i) { std::cout &lt;&lt; (i*i) &lt;&lt; std::endl; }

  int main() {
    foo&lt;eins&gt; a;
    foo&lt;zwei&gt; b;
    a.machWas();
    b.machWas();
  }
</code></pre>
<p>und da dachte ich dass es doch auch durchaus möglich sein sollte eine templateklasse mit einem undefinerten funktionspointer zu definieren und entsprechend eine typedef zu formulieren. Woran liegt es denn dass es undefiniert nicht geht? Das wäre ärgerlich. Gibt es denn einen Workaround?</p>
<p>Es ist im übrigen eine Partikelklasse, die ich aber nicht hier aufführen möchte.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929626</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Wed, 21 Jul 2010 14:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 14:56:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;void (*func)(int) &gt;
struct sF
{
    static void machWas(int j) { (*func)(j); }
};

void eins(int i) { cout &lt;&lt; i &lt;&lt; endl; }
void zwei(int i) { cout &lt;&lt; i * 2 &lt;&lt; endl; }

typedef sF&lt; &amp;eins &gt; tEins;
typedef sF&lt; &amp;zwei &gt; tZwei;

template &lt; typename type, typename arg &gt;
void foo (type &amp;Type, arg Arg)
{
    Type.machWas(Arg);
}

int main(int argc, char *argv[])
{
    tEins Eins;
    tZwei Zwei;

    foo(Eins, 10);
    foo(Zwei, 10);

    return EXIT_SUCCESS;
}
</code></pre>
<p>Hoffe das Du es gebrauchen kannst</p>
<p>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929650</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Wed, 21 Jul 2010 14:56:21 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 14:56:26 GMT]]></title><description><![CDATA[<p>Wenn die Funktionen nur von einer Klasse sind, gehts so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Bar
{
	void eins(int i) { std::cout &lt;&lt; i &lt;&lt; std::endl; }
	void zwei(int i) { std::cout &lt;&lt; (i*i) &lt;&lt; std::endl; }
};

template&lt;void (Bar::*func)(int)&gt;
struct foo
{
	void machWas() { Bar bar; (bar.*func)(42); }
};

int main()
{
	foo&lt;&amp;Bar::eins&gt; a;
	foo&lt;&amp;Bar::zwei&gt; b;
	a.machWas();
	b.machWas();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1929651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929651</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 21 Jul 2010 14:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 15:04:12 GMT]]></title><description><![CDATA[<p>Danke euch! Lichtlein, das sieht gut aus, das werde ich so machen.</p>
<p>thx!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929657</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Wed, 21 Jul 2010 15:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 15:24:56 GMT]]></title><description><![CDATA[<p>Jetzt mal ein Vorschlag mit Member Funktionen.</p>
<p>Sieht aber bald so aus als ob man für Dein Problem die std/binder nehmen könnte?</p>
<pre><code class="language-cpp">template&lt;typename object, typename arg, void (object::*func)(arg) &gt;
struct sF
{
    typedef object  tObject;
    typedef arg     tArg;
    static void machWas(object &amp;Object, arg j) { (Object.*func)(j); }
};

struct cObject
{
    void einsInt(int i) { cout &lt;&lt; i &lt;&lt; endl; }
    void zweiInt(int i) { cout &lt;&lt; i * 2 &lt;&lt; endl; }

    void einsLong(long l) { cout &lt;&lt; l * 10 &lt;&lt; endl; }
    void zweiLong(long l) { cout &lt;&lt; l * 20 &lt;&lt; endl; }
};

typedef sF&lt; cObject, int, &amp;cObject::einsInt &gt; tEinsInt;
typedef sF&lt; cObject, int, &amp;cObject::zweiInt &gt; tZweiInt;

typedef sF&lt; cObject, long, &amp;cObject::einsLong &gt; tEinsLong;
typedef sF&lt; cObject, long, &amp;cObject::zweiLong &gt; tZweiLong;

template &lt; typename type &gt;
void foo(typename type::tObject &amp;Object, typename type::tArg Arg)
{
    type::machWas(Object, Arg);
}

int main(int argc, char *argv[])
{
    cObject Object;

    foo&lt;tEinsInt&gt;(Object, 10);
    foo&lt;tZweiInt&gt;(Object, 10);
    foo&lt;tEinsLong&gt;(Object, 10);
    foo&lt;tZweiLong&gt;(Object, 10);

    return EXIT_SUCCESS;
}
</code></pre>
<p>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929667</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Wed, 21 Jul 2010 15:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to funktionspointer im template typedef definieren on Wed, 21 Jul 2010 20:00:04 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>ich habe eine Templateklasse. Als Template möchte ich<br />
eine Objektfunktion definieren</p>
</blockquote>
<p>Du hast ein <em>Klassen-Template</em> und möchtest über einen <em>Template-Parameter</em> steuern, welche <em>Elementfunktion</em> eines Objekts aufgerufen werden soll.</p>
<p>Ja, das geht. Es gibt Nicht-Typ-Template-Parameter. Dazu gehören auch Zeiger/Referenzen auf &quot;Dinge&quot; (Objekte und Funktionen) mit <em>externer Bindung</em>, einschließlich Zeiger auf Elementfunktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929804</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 21 Jul 2010 20:00:04 GMT</pubDate></item></channel></rss>