<?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[Optionale Template-Typ-Parameter möglich? Wenn ja, wie?]]></title><description><![CDATA[<p>Also, ich habe mir eine kleine Klasse geschrieben, wo ich einen Zeiger auf ein Objekt und einen Zeiger auf eine Member-Funktion dieses Objektes übergebe und dann den operator() überladen, um die Member-Funktion aufzurufen. Läuft alles super. Jetzt habe ich aber das Problem, dass die Member-Funktionen die unterschiedlichsten Parameter haben können und jede mögliche Kombination wolle ich dann doch nicht überladen. <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>
<p>Ich habe bisher:</p>
<pre><code class="language-cpp">template&lt;class T, class R&gt;
class MethodPtr {
public:
   MethodPtr(T* _Object, R (T::* _Method)()) {
      this-&gt;Object  = _Object;
      this-&gt;Method1 = _Method;
   }
   R operator()() {
      return (*this-&gt;Object.*this-&gt;Method1)();
   }

   MethodPtr(T* _Object, R (T::* _Method)(int, int)) {
      this-&gt;Object  = _Object;
      this-&gt;Method2 = _Method;
   }
   R operator()(int v1, int v2) {
      return (*this-&gt;Object.*this-&gt;Method2)(v1, v2);
   }

private:
   T* Object;
   union {
      R (T::* Method1)();
      R (T::* Method2)(int, int);
   };
};
</code></pre>
<p>Das funktioniert, und vorgestellt hatte ich mir sowas:</p>
<pre><code class="language-cpp">template&lt;class T, class R, class P1 = void&gt;
class MethodPtr {
public:
   MethodPtr(T* _Object, R (T::* _Method)()) {
      this-&gt;Object  = _Object;
      this-&gt;Method1 = _Method;
   }
   R operator()() {
      return (*this-&gt;Object.*this-&gt;Method1)();
   }

   MethodPtr(T* _Object, R (T::* _Method)(P1, P1)) {
      this-&gt;Object  = _Object;
      this-&gt;Method2 = _Method;
   }
   R operator()(P1 v1, P1 v2) {
      return (*this-&gt;Object.*this-&gt;Method2)(v1, v2);
   }

private:
   T* Object;
   union {
      R (T::* Method1)();
      R (T::* Method2)(P1, P1);
   };
};
</code></pre>
<p>Also einfach aus allem, was vorher int war, da habe ich P1 gemacht und einen dritten Template-Parameter hinzugefügt.</p>
<p>Leider lässt sich das ganze so nicht kompilieren, ich bekomme die Meldung: &quot;invalid parameter type 'void'&quot;.</p>
<p>Geht das überhaupt? Und wenn ja, wie?</p>
<p>Vielen Dank schonmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120149/optionale-template-typ-parameter-möglich-wenn-ja-wie</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 05:45:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120149.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Sep 2005 11:46:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optionale Template-Typ-Parameter möglich? Wenn ja, wie? on Fri, 09 Sep 2005 11:46:53 GMT]]></title><description><![CDATA[<p>Also, ich habe mir eine kleine Klasse geschrieben, wo ich einen Zeiger auf ein Objekt und einen Zeiger auf eine Member-Funktion dieses Objektes übergebe und dann den operator() überladen, um die Member-Funktion aufzurufen. Läuft alles super. Jetzt habe ich aber das Problem, dass die Member-Funktionen die unterschiedlichsten Parameter haben können und jede mögliche Kombination wolle ich dann doch nicht überladen. <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>
<p>Ich habe bisher:</p>
<pre><code class="language-cpp">template&lt;class T, class R&gt;
class MethodPtr {
public:
   MethodPtr(T* _Object, R (T::* _Method)()) {
      this-&gt;Object  = _Object;
      this-&gt;Method1 = _Method;
   }
   R operator()() {
      return (*this-&gt;Object.*this-&gt;Method1)();
   }

   MethodPtr(T* _Object, R (T::* _Method)(int, int)) {
      this-&gt;Object  = _Object;
      this-&gt;Method2 = _Method;
   }
   R operator()(int v1, int v2) {
      return (*this-&gt;Object.*this-&gt;Method2)(v1, v2);
   }

private:
   T* Object;
   union {
      R (T::* Method1)();
      R (T::* Method2)(int, int);
   };
};
</code></pre>
<p>Das funktioniert, und vorgestellt hatte ich mir sowas:</p>
<pre><code class="language-cpp">template&lt;class T, class R, class P1 = void&gt;
class MethodPtr {
public:
   MethodPtr(T* _Object, R (T::* _Method)()) {
      this-&gt;Object  = _Object;
      this-&gt;Method1 = _Method;
   }
   R operator()() {
      return (*this-&gt;Object.*this-&gt;Method1)();
   }

   MethodPtr(T* _Object, R (T::* _Method)(P1, P1)) {
      this-&gt;Object  = _Object;
      this-&gt;Method2 = _Method;
   }
   R operator()(P1 v1, P1 v2) {
      return (*this-&gt;Object.*this-&gt;Method2)(v1, v2);
   }

private:
   T* Object;
   union {
      R (T::* Method1)();
      R (T::* Method2)(P1, P1);
   };
};
</code></pre>
<p>Also einfach aus allem, was vorher int war, da habe ich P1 gemacht und einen dritten Template-Parameter hinzugefügt.</p>
<p>Leider lässt sich das ganze so nicht kompilieren, ich bekomme die Meldung: &quot;invalid parameter type 'void'&quot;.</p>
<p>Geht das überhaupt? Und wenn ja, wie?</p>
<p>Vielen Dank schonmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868572</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Fri, 09 Sep 2005 11:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Optionale Template-Typ-Parameter möglich? Wenn ja, wie? on Fri, 09 Sep 2005 11:49:46 GMT]]></title><description><![CDATA[<p>void ist als Variablen Typ unzulässig.<br />
Du könntest ihn durch z.b. ein struct nulltype ersetzen,<br />
oder einfach einen standard Parameter vorgeben (int z.b.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868573</guid><dc:creator><![CDATA[1 2 3]]></dc:creator><pubDate>Fri, 09 Sep 2005 11:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Optionale Template-Typ-Parameter möglich? Wenn ja, wie? on Fri, 09 Sep 2005 11:53:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class NullType{};

template&lt;class T, class R, class P1 = NullType&gt; 
class MethodPtr 
{ 
 //...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/868575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868575</guid><dc:creator><![CDATA[ssm]]></dc:creator><pubDate>Fri, 09 Sep 2005 11:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Optionale Template-Typ-Parameter möglich? Wenn ja, wie? on Fri, 09 Sep 2005 11:53:32 GMT]]></title><description><![CDATA[<p>Du solltest mal nach &quot;Funktoren&quot; googeln. Oder dir die 'sigc' Bibliothek anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868576</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Fri, 09 Sep 2005 11:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to Optionale Template-Typ-Parameter möglich? Wenn ja, wie? on Fri, 09 Sep 2005 11:53:45 GMT]]></title><description><![CDATA[<p>oh jo, da hab' ich wohl einfach nur gepennt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Vielen Dank. Kann von mir aus gelöscht werden. <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/868578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868578</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Fri, 09 Sep 2005 11:53:45 GMT</pubDate></item></channel></rss>