<?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[&#x2F;&#x2F;template member funktion]]></title><description><![CDATA[<p>Hallo<br />
Folgendes Problem. In einer Klasse <em>MyKernelAccess</em> habe ich zum erzeugen beliebiger MyArray&lt; T &gt; Klassen eine Template Methode implementiert.<br />
Eine andere Template-Klasse &quot;MyController&quot; hat eine Instanz der <em>MyKernelAccess</em> Klasse. Jedoch kommen bei Nutzung der template Methode unten genannte Fehler. Komisch ist jedoch, dass der Aufruf über eine lokale Instanz im Gegensatz zur Member-Instanz keine Fehler wirft.<br />
Woran liegt das? Irgendwie habe ich noch was von Besonderheiten bei Member-Template-Methoden im Hinterkopf. Wie kann ich das Problem umgehen? Denn ich brauche im richtigen Code Daten aus der Membervariable, möchte aber auf die Flexibilität des Template snicht verzichten (die Float, Dummy Implementierung sind nur zwei von vielen möglichen).</p>
<p>[edit: bsp: gekuerzt]</p>
<pre><code class="language-cpp">template&lt; typename T&gt;
class MyArray{ public: T a; };

struct MyDummyClass{};

//Hauptklasse
class MyKernelAccess
{
public:
   template&lt; typename T &gt;
   MyArray&lt; T &gt; createTemplate(){return MyArray&lt; T &gt;();}
};

template&lt; typename T&gt;
class MyController
{
protected:
 MyKernelAccess controller;

public:
 void create()
 {
   MyKernelAccess scopeController;
   scopeController.createTemplate&lt;MyDummyClass&gt;();
   scopeController.createTemplate&lt;float&gt;();

   this-&gt;controller.createTemplate&lt;MyDummyClass&gt;(); //Fehler: expected primary-expression before &quot;&gt;&quot; token 
                                                    //Fehler: expected primary-expression before &quot;)&quot; token

   this-&gt;controller.createTemplate&lt;float&gt;(); //Fehler: expected primary-expression before float
                                             //Fehler: expected `;' before &quot;float&quot;
   //ABER FOLGENDES FUNZT:
   controller.createTemplate&lt;MyDummyClass&gt;();
   controller.createTemplate&lt;float&gt;(); 
 }
};

int main()
{
   MyKernelAccess scopeController;
   scopeController.createTemplate&lt;MyDummyClass&gt;();
   scopeController.createTemplate&lt;float&gt;();
}
</code></pre>
<p>Kann mir einer diese Fehlermeldung schöüssig erklären und evtl einen guten Lösungsvorschlag liefern. Der MSVC Compiler schluckt das natürlich wieder mal (mit Ausnahme der nicht vorhandenen Methoden). Aber beim gcc 4.x gibt es mecker! Vermutlich Zurecht!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226695/template-member-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 15:00:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226695.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Nov 2008 18:56:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &#x2F;&#x2F;template member funktion on Tue, 04 Nov 2008 22:04:02 GMT]]></title><description><![CDATA[<p>Hallo<br />
Folgendes Problem. In einer Klasse <em>MyKernelAccess</em> habe ich zum erzeugen beliebiger MyArray&lt; T &gt; Klassen eine Template Methode implementiert.<br />
Eine andere Template-Klasse &quot;MyController&quot; hat eine Instanz der <em>MyKernelAccess</em> Klasse. Jedoch kommen bei Nutzung der template Methode unten genannte Fehler. Komisch ist jedoch, dass der Aufruf über eine lokale Instanz im Gegensatz zur Member-Instanz keine Fehler wirft.<br />
Woran liegt das? Irgendwie habe ich noch was von Besonderheiten bei Member-Template-Methoden im Hinterkopf. Wie kann ich das Problem umgehen? Denn ich brauche im richtigen Code Daten aus der Membervariable, möchte aber auf die Flexibilität des Template snicht verzichten (die Float, Dummy Implementierung sind nur zwei von vielen möglichen).</p>
<p>[edit: bsp: gekuerzt]</p>
<pre><code class="language-cpp">template&lt; typename T&gt;
class MyArray{ public: T a; };

struct MyDummyClass{};

//Hauptklasse
class MyKernelAccess
{
public:
   template&lt; typename T &gt;
   MyArray&lt; T &gt; createTemplate(){return MyArray&lt; T &gt;();}
};

template&lt; typename T&gt;
class MyController
{
protected:
 MyKernelAccess controller;

public:
 void create()
 {
   MyKernelAccess scopeController;
   scopeController.createTemplate&lt;MyDummyClass&gt;();
   scopeController.createTemplate&lt;float&gt;();

   this-&gt;controller.createTemplate&lt;MyDummyClass&gt;(); //Fehler: expected primary-expression before &quot;&gt;&quot; token 
                                                    //Fehler: expected primary-expression before &quot;)&quot; token

   this-&gt;controller.createTemplate&lt;float&gt;(); //Fehler: expected primary-expression before float
                                             //Fehler: expected `;' before &quot;float&quot;
   //ABER FOLGENDES FUNZT:
   controller.createTemplate&lt;MyDummyClass&gt;();
   controller.createTemplate&lt;float&gt;(); 
 }
};

int main()
{
   MyKernelAccess scopeController;
   scopeController.createTemplate&lt;MyDummyClass&gt;();
   scopeController.createTemplate&lt;float&gt;();
}
</code></pre>
<p>Kann mir einer diese Fehlermeldung schöüssig erklären und evtl einen guten Lösungsvorschlag liefern. Der MSVC Compiler schluckt das natürlich wieder mal (mit Ausnahme der nicht vorhandenen Methoden). Aber beim gcc 4.x gibt es mecker! Vermutlich Zurecht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610234</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 04 Nov 2008 22:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template member funktion on Tue, 04 Nov 2008 19:26:09 GMT]]></title><description><![CDATA[<p>habe noch etwas weiter getestet:<br />
wenn ich &quot;this-&gt;&quot; weglasse, dann gibt es keinen Kompilerfehler!</p>
<p>also</p>
<pre><code class="language-cpp">controller.createDummy();
controller.createFloat();
controller.createTemplate&lt;MyDummyClass&gt;();
</code></pre>
<p>anstatt</p>
<pre><code class="language-cpp">this-&gt;controller.createDummy();
this-&gt;controller.createFloat();
this-&gt;controller.createTemplate&lt;MyDummyClass&gt;();
</code></pre>
<p>Wieso???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610249</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 04 Nov 2008 19:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template member funktion on Tue, 04 Nov 2008 19:32:28 GMT]]></title><description><![CDATA[<p>Die Templatemethode sollte so schon stimmen.</p>
<p>Was folgende Zeile angeht: <code>createDummy1()</code> ist tatsächlich nicht in der Klasse. <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>
<pre><code class="language-cpp">scopeController.createDummy1();
</code></pre>
<p>Was das <code>this</code> anbelangt, da scheint etwas mit dem Compiler nicht in Ordnung zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610253</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 04 Nov 2008 19:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to &#x2F;&#x2F;template member funktion on Tue, 04 Nov 2008 19:39:57 GMT]]></title><description><![CDATA[<p>naja, es ist der gcc 4.2. die andere methode gibt es nicht. das ist korrekt... aber es wurde eben kein fehler angezeigt.<br />
jedoch ist der reale code etwas komplexer und beihnaltet viele typedefs und traits... mal schauen, ob es jetzt funktioniert! das mit dem this zeiger hat mich schon arg verwundert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610259</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Tue, 04 Nov 2008 19:39:57 GMT</pubDate></item></channel></rss>