<?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[frage zur verheiratung von zwei template klassen]]></title><description><![CDATA[<p>folgende vererbungshirarchie:</p>
<pre><code>template &lt;typename T&gt;
class Base
{
  public:
    Base( T t):elem(t){}
    T elem;
};
class EffA : public Base&lt;int&gt;
{
  public:
    EffA( int i ) : Base(i){}
};

class EffB : public Base&lt;std::string&gt;
{
  public:
    EffB( std::string str ) : Base(str){}
};
</code></pre>
<p>ein eigens geschriebenes programm verwaltet in einer stl-liste zeiger auf instanzen vom typ EffA. ich moechte die obige vererbungshirarchie ausnutzen und diese liste verallgemeinern und auch EffB erlauben (heisst durchmischt).<br />
Wie sehe dann die deklaration einer solchen liste aus ??? (geht sowas ueberhaupt ?)</p>
<p>wie koennte man sowas machen ?</p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301804/frage-zur-verheiratung-von-zwei-template-klassen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 18:28:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301804.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Apr 2012 08:20:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 08:20:10 GMT]]></title><description><![CDATA[<p>folgende vererbungshirarchie:</p>
<pre><code>template &lt;typename T&gt;
class Base
{
  public:
    Base( T t):elem(t){}
    T elem;
};
class EffA : public Base&lt;int&gt;
{
  public:
    EffA( int i ) : Base(i){}
};

class EffB : public Base&lt;std::string&gt;
{
  public:
    EffB( std::string str ) : Base(str){}
};
</code></pre>
<p>ein eigens geschriebenes programm verwaltet in einer stl-liste zeiger auf instanzen vom typ EffA. ich moechte die obige vererbungshirarchie ausnutzen und diese liste verallgemeinern und auch EffB erlauben (heisst durchmischt).<br />
Wie sehe dann die deklaration einer solchen liste aus ??? (geht sowas ueberhaupt ?)</p>
<p>wie koennte man sowas machen ?</p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198576</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Wed, 04 Apr 2012 08:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 08:39:19 GMT]]></title><description><![CDATA[<p>Du bräuchtest eine gemeinsame Basisklasse. Base&lt;int&gt; und Base<a href="std::string" rel="nofollow">std::string</a> sind nicht die gleiche Klasse, sie haben bloß einen gemeinsamen Namensbestandteil.</p>
<p>Du müsstest den gemeinsamen Teil, den du in der Liste verwalten möchtest, in eine weitere, noch tiefer gelegene, Basisklasse einführen, von der das Klassentemplate erbt.</p>
<p>Oder, da du hier nach technischer Umsetzung statt nach einer Problemlösung fragst, du verrätst uns das eigentliche Problem. Vielleicht gibt es eine bessere Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198581</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Apr 2012 08:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 08:43:07 GMT]]></title><description><![CDATA[<p>Welche Vererbungshierarchie? Ich sehe nicht eine, sondern zwei:</p>
<p>EffA : public Base&lt;int&gt;<br />
EffB : public Base<a href="std::string" rel="nofollow">std::string</a></p>
<p>Wobei Base&lt;int&gt; und Base<a href="std::string" rel="nofollow">std::string</a> nix miteinander zu tun haben, vererbungstechnisch.</p>
<p>Mir kommt EffA und EffB auch recht überflüssig vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198583</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 04 Apr 2012 08:43:07 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 08:49:05 GMT]]></title><description><![CDATA[<p>hintergrund ist der,<br />
dass abgebildete vererbungshirarchie fest vorgegeben ist durch eine<br />
externe library, heisst ich kann sie nicht aendern.</p>
<p>ich nutze besagte library in eigener software und verwalte derzeit eine liste von EffA Instanzen.<br />
die listen-struktur ist ein zentraler bestandteil der software und muss beibehalten werden. allerdings habe ich nun die anforderung dass diese liste auch EffB elemente enthalten koennen soll.</p>
<p>Die Verwandtheit beider Klassen EffA und EffB (sind doch beiderseits Base abkoemmlinge dachte ich !?!) wollte ich fuer die deklaration einer solchen liste ausnutzen, habe aber keinen schimmer <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="😕"
    />, ob das ueberhaupt moeglich ist !?</p>
<p>Sind da vielleicht unions nuetzlich um obiges unter einen hut zu bekommen !?</p>
<p>danke vorab schonmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198588</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Wed, 04 Apr 2012 08:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 08:52:20 GMT]]></title><description><![CDATA[<p>@kruemelkacker:<br />
das beispiel ist vereinfacht. dass effb und effa keine weiteren spezielleren eigentschaften besitzen macht sie natuerlich ueberfluessig, darum gehts mir aber nicht.<br />
ok, dann spreche ich Dir zuliebe nicht von vererbungs-hirarchie sondern von vererbungs-beziehung.</p>
<p>ich hatte gedacht dass EffA und EffB abkoemmlinge von Base seien und damit schon &quot;verwandt&quot;, aber irgendwas scheine ich da zu uebersehen !?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198589</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Wed, 04 Apr 2012 08:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 09:01:44 GMT]]></title><description><![CDATA[<p>Wie schon gesagt Base&lt;int&gt; und Base<a href="std::string" rel="nofollow">std::string</a> sind komplett unterschiedliche Klassen, die gar nichts miteinander zu tun haben, außer einer gemeinsamen Namenshälfte. Die beiden haben so viel gemeinsam wie die folgenden beiden Klassen:</p>
<pre><code class="language-cpp">class Base_int { /* ... */ };

class Base_std_string { /* ... */ };
</code></pre>
<p>Die würdest du ja auch nicht als gemeinsame Basisklasse ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198592</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 04 Apr 2012 09:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 09:03:01 GMT]]></title><description><![CDATA[<p>krümelkacker hat Recht, dass beide Klassen vom gleichen Template erben nützt hier nichts.<br />
Aber vielleicht hilft Dir <a href="http://www.boost.org/doc/libs/1_49_0/doc/html/any.html" rel="nofollow">boost::any</a> weiter.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198593</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 04 Apr 2012 09:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 09:14:15 GMT]]></title><description><![CDATA[<p>hmm, irgendwie hat sich der knoten in meinem kopf noch nicht ganz geloest:<br />
ich moechte mein code-beispiel daher etwas erweitern, vielleicht ist das ja der grund:</p>
<pre><code>template &lt;typename T&gt;
class Saeugetier
{
  public:
    Saeugetier( T t, int z):besondereEigenschaft(t),anzahlZitzen(z){}
    T besondereEigenschaft;
    int anzahlZitzen;
};
class Schaf : public Sauegetier&lt;int&gt;
{
  public:
    Schaf( int i ) : Saeugetier(i,4){}
};

class Mensch : public Saeugetier&lt;std::string&gt;
{
  public:
    Mensch( std::string str ) : Saeugetier(str,2){}
};
</code></pre>
<p>wieso ist mensch nun nicht mit schaf verwandt ?<br />
ich hab ne liste von schafen und will diese verallgemeinern auf eine liste von saeugetieren (die auch mensch sein koennen ... abgesehen von der tatsache, dass manche menschen manchmal auch schafe sein koennen <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/2198597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198597</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Wed, 04 Apr 2012 09:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 09:17:19 GMT]]></title><description><![CDATA[<p>pepe75 schrieb:</p>
<blockquote>
<p>wieso ist mensch nun nicht mit schaf verwandt ?</p>
</blockquote>
<p><strong>Weil Sauegetier&lt;int&gt; nicht mit Saeugetier<a href="std::string" rel="nofollow">std::string</a> verwandt ist.</strong></p>
<p>pepe75 schrieb:</p>
<blockquote>
<p>ich hab ne liste von schafen und will diese verallgemeinern auf eine liste von saeugetieren</p>
</blockquote>
<p>Das geht nicht, weil es keine Klasse namens Saeugetier gibt. Ein Klassentemplate ist keine Klasse, sondern eine Vorlage für ganz viele verschiedene Klassen, die <strong>nichts</strong> miteinander zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198598</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 04 Apr 2012 09:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 09:47:52 GMT]]></title><description><![CDATA[<p>Zuerst sollte der Begriff &quot;Template&quot; geklärt werden. Schaue z.B. hier: <a href="http://www.c-plusplus.net/forum/128361-full" rel="nofollow">http://www.c-plusplus.net/forum/128361-full</a> oder <a href="http://de.wikipedia.org/wiki/Template_(Programmierung)" rel="nofollow">http://de.wikipedia.org/wiki/Template_(Programmierung)</a> oder <a href="http://www.willemer.de/informatik/cpp/cpptempl.htm" rel="nofollow">http://www.willemer.de/informatik/cpp/cpptempl.htm</a>.<br />
Dein Problem ist mir nicht 100% klar; aber eine Möglichkeit wäre vielleicht anstelle von Vererbung Aggregation oder Assoziation zu verwenden. Also mache ggf. eine gemeinsame Oberklasse von EffA und EffB welche alle Gemeinsamkeiten vereint und NUTZE nur in EffA Base&lt;int&gt; und in EffB Base<a href="std::string" rel="nofollow">std::string</a>.<br />
Gruß Helmut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198605</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Wed, 04 Apr 2012 09:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 12:45:53 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Aber vielleicht hilft Dir <a href="http://www.boost.org/doc/libs/1_49_0/doc/html/any.html" rel="nofollow">boost::any</a> weiter.</p>
</blockquote>
<p>boost::any ist IMO selten sinnvoll. Eher boost::variant. Dennoch denke ich, dass der TE eher noch eine gemeinsame Basisklasse haben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198663</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 04 Apr 2012 12:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Thu, 05 Apr 2012 00:19:15 GMT]]></title><description><![CDATA[<p>Falls die Objekte alle auf die gleiche Weise angesprochen werden, könnte noch type erasure eine Möglichkeit sein:</p>
<pre><code class="language-cpp">class base_foo
{
public:
   virtual void bar() = 0;
   virtual ~base_foo(){}
};
template&lt; class T &gt;
class foo
  : public base_foo
{
public:
    foo( T obj_ )
      : obj( std::move( obj_ ) )
    {
    }
    void bar()
    {
        obj.bar();
    }
private:
    T obj;
};

std::vector&lt; base_foo* &gt; container;
container.push_back( new foo&lt; A &gt;( A() ) );
container.push_back( new foo&lt; B &gt;( B() ) );
</code></pre>
<p>EDIT: siehe pyhax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198746</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Thu, 05 Apr 2012 00:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Wed, 04 Apr 2012 17:07:48 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26958">@GorbGorb</a> Du hast 3 verschiedene Bezeichnungen für foo_base : base_for, base_foo und foo_base <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/2198782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198782</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 04 Apr 2012 17:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to frage zur verheiratung von zwei template klassen on Thu, 05 Apr 2012 10:27:38 GMT]]></title><description><![CDATA[<p>pepe75 schrieb:</p>
<blockquote>
<p>ich hatte gedacht dass EffA und EffB abkoemmlinge von Base seien und damit schon &quot;verwandt&quot;, aber irgendwas scheine ich da zu uebersehen !?</p>
</blockquote>
<p>Ja, tust Du. Nix kann im Sinne der Vererbung Abkömmling von Base sein, weil Base gar keine Klasse ist. Es ist nur eine parametrisierte Vorlage, mit der Du diverse Klassen erzeugen kannst. Klassen wie Base&lt;int&gt; oder Base&lt;string&gt;. Das sind zwei verschiedene Klassen, die in <em>keiner</em> Vererbungsbeziehung zueinander stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198955</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 05 Apr 2012 10:27:38 GMT</pubDate></item></channel></rss>