<?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 in virtueller methode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine templatebasierte klasse C&lt;T&gt;.</p>
<p>Und ich habe eine abstrakte Klasse A von der 2 andere Subklassen A1 und A2 erben.<br />
Nun will ich in einer Methode von A1 auf eine Methode von C&lt;T&gt; zugreifen. Schaffe ich das?</p>
<p>Ich habe es bisher nicht geschafft da ich ja nicht A einfach templatebasiert schreiben kann und an die subklassen durchreichen kann.</p>
<p>Gäbe es da eine Möglichkeit?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255406/templates-in-virtueller-methode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 01:26:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255406.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Nov 2009 14:30:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates in virtueller methode on Mon, 30 Nov 2009 14:30:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine templatebasierte klasse C&lt;T&gt;.</p>
<p>Und ich habe eine abstrakte Klasse A von der 2 andere Subklassen A1 und A2 erben.<br />
Nun will ich in einer Methode von A1 auf eine Methode von C&lt;T&gt; zugreifen. Schaffe ich das?</p>
<p>Ich habe es bisher nicht geschafft da ich ja nicht A einfach templatebasiert schreiben kann und an die subklassen durchreichen kann.</p>
<p>Gäbe es da eine Möglichkeit?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815419</guid><dc:creator><![CDATA[Gambo]]></dc:creator><pubDate>Mon, 30 Nov 2009 14:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in virtueller methode on Mon, 30 Nov 2009 14:34:46 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht ganz, was du tun willst, aber es klingt mir nach einem Designfehler. Dein Code ist irgendwie so:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class C
{
};

class A
{
};

class A1 : public A
{
public:
    void methode()
    {
        // Was willst du hier tun?
    }
};

class A2 : public A
{
};
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815421</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Mon, 30 Nov 2009 14:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in virtueller methode on Mon, 30 Nov 2009 14:46:13 GMT]]></title><description><![CDATA[<p>danke - so ist der code genau.</p>
<p>Ich wollte sowas schaffen:</p>
<p>der template ansatz</p>
<pre><code class="language-cpp">class C1
{
  void fooC ();
};

class C2
{
  void fooC ();
};

template&lt;typename T&gt;
class C
{
  void bar ()
  {

  }

  void myfoo ()
  {
   T t; 
   t.fooC (  );
  }
};
</code></pre>
<p>und jetzt in verbindung mit vererbung</p>
<pre><code class="language-cpp">class Base
{
public:
    virtual ~Base();
    virtual void basefoo() = 0;
};

class A1 : public Base&lt;T&gt;
{
public:
    virtual void foo&lt;T&gt;(T *myC)
    {
        myC-&gt;myfoo();
    }
};

class A2 : public Base&lt;T&gt; 
{
public:

    virtual void foo(T *myC)
    {
       myC-&gt;myfoo();
    }
};
</code></pre>
<p>und irgendwo in main dann</p>
<pre><code class="language-cpp">//irgendwo in main z.B.
C&lt;C1&gt; myC;

Base * base = new A1();
base.foo(&amp;myC);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1815428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815428</guid><dc:creator><![CDATA[Gambo]]></dc:creator><pubDate>Mon, 30 Nov 2009 14:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in virtueller methode on Mon, 30 Nov 2009 15:02:05 GMT]]></title><description><![CDATA[<p>Du willst also eine virtuelle Templatemethode, der du dann C&lt;C1&gt;, C&lt;C2&gt;, C&lt;xy&gt; übergeben kannst? Das ist nach dem aktuellen C++ Standard AFAIK nicht erlaubt, du musst für deine Templateklasse C&lt;T&gt; eine <em>nicht-template</em>-Basisklasse haben, welche eine Methode für den Aufruf bereitstellt und diese dann als Argument für eine normale Methode verwenden.</p>
<p>C++/CLI unterstützt virtual generics, was dem was du willst wohl am nächsten kommen würde, aber hier nicht verwendet werden kann.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815434</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Mon, 30 Nov 2009 15:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Templates in virtueller methode on Mon, 30 Nov 2009 16:24:08 GMT]]></title><description><![CDATA[<p>Gambo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class C1
{
  void fooC ();
};

class C2
{
  void fooC ();
};
</code></pre>
</blockquote>
<p>hast wohl ein <code>public:</code> vergessen.</p>
<p>Gambo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
class C
{
  void bar ();

  void myfoo ()
  {
   T t; 
   t.fooC (  );
  }
};
</code></pre>
<p>und jetzt in verbindung mit vererbung</p>
<pre><code class="language-cpp">class Base
{
public:
    virtual ~Base();
    virtual void basefoo() = 0;
};

class A1 : public Base&lt;T&gt;
{
public:
    virtual void foo&lt;T&gt;(T *myC)
    {
        myC-&gt;myfoo();
    }
};

class A2 : public Base&lt;T&gt; 
{
public:

    virtual void foo(T *myC)
    {
       myC-&gt;myfoo();
    }
};
</code></pre>
</blockquote>
<p>Was ist T? Und warum benutzt Du Base wie ein Klassentemplate? Wo wird denn basefoo überschrieben? Was soll <code>T *myC</code> als Parameter von A1::foo bzw A2::foo? Warum gibt es überhaupt Base? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Gambo schrieb:</p>
<blockquote>
<p>und irgendwo in main dann</p>
<pre><code class="language-cpp">//irgendwo in main z.B.
C&lt;C1&gt; myC;

Base * base = new A1();
base.foo(&amp;myC);
</code></pre>
</blockquote>
<p>A1 ist immernoch abstrakt. <code>new A1</code> geht also nicht. Was für ein <code>foo</code> rufst Du denn da auf?</p>
<p>Kannst Du das nochmal erklären, was Du <em>eigentlich</em> bezwecken willst? Der Code allein ergibt für mich wenig Sinn. Ich schätze, Du bist mit den Sprach-Features, die C++ bietet, einfach überfordert. Statt ein Design-Ansatzes zu geben, sag am besten, <em>was</em> Du willst und man kann Dir Vorschläge machen, <em>wie</em> man es am besten umsetzt.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815478</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 30 Nov 2009 16:24:08 GMT</pubDate></item></channel></rss>