<?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[Methodenpointer und Templates]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich möchte einen Pointer auf eine Templatemethode setzen, die selbst Member einer Templateklasse ist.</p>
<pre><code class="language-cpp">// Methode, die den Funktionspointer ausnehmen soll
// als template um Pointer auf Methoden verschiedener Klassen aufnehmen zu können
template &lt;typename T&gt;
void
setCallBack( void(T::*pointerToCallBack)(), T* pointerToObject )
{
	// do something to save the funktion pointer
}

class Test {
	public:		
		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test::f&lt; ID &gt;, this );
		};
};

template&lt; typename T &gt;
class Test2 {
	public:		
		void
		g() {
			setCallBack( &amp;Test2&lt; T &gt;::g, this );
		};

		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test2&lt; T &gt;::f&lt; ID &gt;, this );
		};
};
</code></pre>
<p>Die Methoden setzen einen CallBack auf sich selbst, indem der Methodenpointer an die Funktion setCallBack übergeben wird.</p>
<p>Die Variante nichttemplate Klasse + Template Methode (Test::f), sowie im getauschten Fall, Templateklasse + nicht template Methode (Test2::g) kompilieren. Nur im Fall von Test2::f ist der Kompiler unzufrieden:</p>
<pre><code>expected primary-expression before »,« token
</code></pre>
<p>Jemand eine Idee?</p>
<p>cu<br />
Thundernail</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204341/methodenpointer-und-templates</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204341.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Feb 2008 21:37:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 21:37:19 GMT]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich möchte einen Pointer auf eine Templatemethode setzen, die selbst Member einer Templateklasse ist.</p>
<pre><code class="language-cpp">// Methode, die den Funktionspointer ausnehmen soll
// als template um Pointer auf Methoden verschiedener Klassen aufnehmen zu können
template &lt;typename T&gt;
void
setCallBack( void(T::*pointerToCallBack)(), T* pointerToObject )
{
	// do something to save the funktion pointer
}

class Test {
	public:		
		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test::f&lt; ID &gt;, this );
		};
};

template&lt; typename T &gt;
class Test2 {
	public:		
		void
		g() {
			setCallBack( &amp;Test2&lt; T &gt;::g, this );
		};

		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test2&lt; T &gt;::f&lt; ID &gt;, this );
		};
};
</code></pre>
<p>Die Methoden setzen einen CallBack auf sich selbst, indem der Methodenpointer an die Funktion setCallBack übergeben wird.</p>
<p>Die Variante nichttemplate Klasse + Template Methode (Test::f), sowie im getauschten Fall, Templateklasse + nicht template Methode (Test2::g) kompilieren. Nur im Fall von Test2::f ist der Kompiler unzufrieden:</p>
<pre><code>expected primary-expression before »,« token
</code></pre>
<p>Jemand eine Idee?</p>
<p>cu<br />
Thundernail</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447839</guid><dc:creator><![CDATA[Thundernail]]></dc:creator><pubDate>Fri, 01 Feb 2008 21:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 21:48:45 GMT]]></title><description><![CDATA[<p>Also ich kann dir nicht direkt helfen, aber ich habe das auch mal gemacht.</p>
<pre><code class="language-cpp">template&lt;class t&gt; void  foo(t* pt,void (t::* f)() ) { (pt-&gt;*f) ();}
</code></pre>
<p>Diese Funktion (die auch eine Memberunktion sein kann), übernimmt einen Zeiger auf eine beliebeige Klasse, sowie einen Funktionszeiger. Den du dann so aufrufen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447846</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 01 Feb 2008 21:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 21:59:59 GMT]]></title><description><![CDATA[<p>Moin moin,</p>
<p>anscheinend hab ich mich etwas undeutlich ausgedrückt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe kein Problem mit der Implementation der Funktion setCallBack, die habe ich nur weggelassen, weil sie recht komplex ist.</p>
<p>Der Kompiler streikt schon beim Aufruf der Funktion. Allerdings nur wenn zwei Templateparameter (für die Klasse und die Methode) übergeben werden. Solange nur die Klasse _oder_ die Methode ein Template ist, funktioniert der Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447851</guid><dc:creator><![CDATA[Thundernail]]></dc:creator><pubDate>Fri, 01 Feb 2008 21:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 22:14:29 GMT]]></title><description><![CDATA[<p>Also ich bekomme einen Fehler, wenn ich Test, oder Test2 einfach mal so ein Objekt erstelle:</p>
<p>error C2143: Syntaxfehler: Es fehlt ';' vor '&lt;'</p>
<p>Konnte es bis jetzt noch nicht isolieren, wo er das genau meint.</p>
<p>EDIT:<br />
Hm, also das mit dem Fehler war was anderes. Habe gedacht, dass beides Templateklassen sind. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber jetzt bekomme ich keine Fehler mehr.</p>
<p>PS.<br />
Von welcher Programmiersprache kommst du? - Dein Stil ist ja.. sehr &quot;anderst&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447852</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 01 Feb 2008 22:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 22:31:24 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass da was mit template&lt;unsigned int ID&gt; nicht stimmt.<br />
Ich weiss sowieso nicht, was das genau soll. <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 />
Also meiner Meinung nach macht das auch nicht viel Sinn.<br />
Wenn ich das nämlich in template&lt;typename ID&gt; ändere, funktioniert der Code..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447860</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 01 Feb 2008 22:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 22:32:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt; typename T &gt;
class Test2 {
...
		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test2::template f&lt; ID &gt;, this );
		};
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1447866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447866</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Feb 2008 22:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 22:50:47 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich denke mal, dass da was mit template&lt;unsigned int ID&gt; nicht stimmt.<br />
Ich weiss sowieso nicht, was das genau soll. <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="🙄"
    /></p>
</blockquote>
<p>Das ist eine alternative zu f(unsigned int id). Bei der Templateversion wird für jede ID eine eigene Methode vom Kompiler erstellt, wodurch ich für jede ID einen eigenen Methodenpointer bekomme. Dazu muss natürlich die ID beim Aufruf zur Kompilierzeit.<br />
Ich glaube nicht, dass es daran liegt, weil ich Test::f problemlos kompiliert bekomme.<br />
Der Aufruf von Test::f sieht dann übrigens so aus:</p>
<pre><code class="language-cpp">int main() {
    Test test;
    test.f&lt; 1 &gt;();
}
</code></pre>
<p>drakon schrieb:</p>
<blockquote>
<p>PS. Von welcher Programmiersprache kommst du? - Dein Stil ist ja.. sehr &quot;anderst&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Wie meist du das? Ich mach zwar auch das ein oder andere in PHP aber hauptsächlich ist das schon C++. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447870</guid><dc:creator><![CDATA[Thundernail]]></dc:creator><pubDate>Fri, 01 Feb 2008 22:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenpointer und Templates on Fri, 01 Feb 2008 22:56:26 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt; typename T &gt;
class Test2 {
...
		template&lt; unsigned int ID &gt;
		void
		f() {
			setCallBack( &amp;Test2::template f&lt; ID &gt;, this );
		};
...
</code></pre>
</blockquote>
<p>Der &quot;selbsterklärende&quot; Aufbau von C++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Vielen Dank camper, das hätte ich bestimmt nicht versucht <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/1447875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447875</guid><dc:creator><![CDATA[Thundernail]]></dc:creator><pubDate>Fri, 01 Feb 2008 22:56:26 GMT</pubDate></item></channel></rss>