<?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[[solved] transformation von variadic template types]]></title><description><![CDATA[<p>also ich habe eine variadic template Klasse</p>
<pre><code>teplate &lt;typename... Ts&gt;
class mytype {
};
</code></pre>
<p>Diese soll als Member ein Tuple aus Vectoren haben, und zwar zu jeden Typ aus der Template-Argumentliste ein vector. Hier mal ein Beispiel;</p>
<p>also bei</p>
<pre><code>mytype&lt;A,B,C&gt;;
</code></pre>
<p>soll der Member den folgenden Typ haben</p>
<pre><code>std::tuple&lt;std::vector&lt;A&gt;, std::vector&lt;B&gt;, std::vector&lt;C&gt;&gt;
</code></pre>
<p>ich bin mir bisher nich so sicher wie ich da herangehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327374/solved-transformation-von-variadic-template-types</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 10:45:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327374.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Aug 2014 17:34:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 19:39:38 GMT]]></title><description><![CDATA[<p>also ich habe eine variadic template Klasse</p>
<pre><code>teplate &lt;typename... Ts&gt;
class mytype {
};
</code></pre>
<p>Diese soll als Member ein Tuple aus Vectoren haben, und zwar zu jeden Typ aus der Template-Argumentliste ein vector. Hier mal ein Beispiel;</p>
<p>also bei</p>
<pre><code>mytype&lt;A,B,C&gt;;
</code></pre>
<p>soll der Member den folgenden Typ haben</p>
<pre><code>std::tuple&lt;std::vector&lt;A&gt;, std::vector&lt;B&gt;, std::vector&lt;C&gt;&gt;
</code></pre>
<p>ich bin mir bisher nich so sicher wie ich da herangehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412450</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Thu, 07 Aug 2014 19:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 17:39:04 GMT]]></title><description><![CDATA[<p>Durch eine pack expansion:</p>
<pre><code>template &lt;typename... Ts&gt;
class mytype
{
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt; mData;
};
</code></pre>
<p>Hierbei ist <code>std::vector&lt;Ts&gt;</code> das Expansionsmuster.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412451</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 07 Aug 2014 17:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 17:43:39 GMT]]></title><description><![CDATA[<p>Aus EBO-Überlegungen bei leerer Argumentliste ist es oft sinnvoll, von dem Tupel privat zu erben.</p>
<pre><code class="language-cpp">template &lt;typename... Ts&gt;
class mytype : std::tuple&lt;std::vector&lt;Ts&gt;...&gt;
{
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt;&amp; data() { return *this; }
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt; const&amp; data() const { return *this; }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2412452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412452</guid><dc:creator><![CDATA[ebo]]></dc:creator><pubDate>Thu, 07 Aug 2014 17:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 19:39:13 GMT]]></title><description><![CDATA[<p>ebo schrieb:</p>
<blockquote>
<p>Aus EBO-Überlegungen bei leerer Argumentliste ist es oft sinnvoll, von dem Tupel privat zu erben.</p>
<pre><code class="language-cpp">template &lt;typename... Ts&gt;
class mytype : std::tuple&lt;std::vector&lt;Ts&gt;...&gt;
{
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt;&amp; data() { return *this; }
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt; const&amp; data() const { return *this; }
};
</code></pre>
</blockquote>
<p>EBO ? Hatte ich bisher noch nie was mit zu tun. Ich bin auch dagegen, weil ich versuche mein Projekt komplett frei von Vererbung zu halten. Es ist aber ein privates Versuchsproject und bisher funktioniert es recht gut.Aber danke für deine Meinung.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Durch eine pack expansion:</p>
<pre><code>template &lt;typename... Ts&gt;
class mytype
{
    std::tuple&lt;std::vector&lt;Ts&gt;...&gt; mData;
};
</code></pre>
<p>Hierbei ist <code>std::vector&lt;Ts&gt;</code> das Expansionsmuster.</p>
</blockquote>
<p>danke, genau danach habe ich gesucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412465</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Thu, 07 Aug 2014 19:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 19:54:50 GMT]]></title><description><![CDATA[<p>Hier ist irgendwie ein Beitrag von Sone verschwunden... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412468</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 07 Aug 2014 19:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 20:10:57 GMT]]></title><description><![CDATA[<p>Krux schrieb:</p>
<blockquote>
<p>ch bin auch dagegen, weil ich versuche mein Projekt komplett frei von Vererbung zu halten.</p>
</blockquote>
<p>Wieso denn das?<br />
EBO ist die Empty Base Optimization.<br />
In kurz: Leere Klassen (=nur (static) nicht virtuelle Funktionen und/oder Typedefs) haben in C++ die Größe (=sizeof) 1.<br />
Erbt man allerdings von ihnen, kann oft EBO angewendet und das Objekt komplett wegoptimiert werden.<br />
std::tuple&lt;&gt; scheint laut &quot;ebo&quot; leer zu sein, wenn man davon erbt hat man also keinen Overhead, falls jemand myclass ohne Argumente instantziiert.<br />
Anwenden würde ich das aber hier auch nicht, je nach Kontext ist es auch illegal keine Argumente anzugeben.</p>
<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Hier ist irgendwie ein Beitrag von Sone verschwunden... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
</blockquote>
<p>Ja, viel mir auch auf.<br />
Der Bestand aber nur aus &quot;Edit: War falsch&quot; oder so; jedenfalls als ich ihn gelesen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412473</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 07 Aug 2014 20:10:57 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Thu, 07 Aug 2014 22:27:24 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Krux schrieb:</p>
<blockquote>
<p>ch bin auch dagegen, weil ich versuche mein Projekt komplett frei von Vererbung zu halten.</p>
</blockquote>
<p>Wieso denn das?<br />
EBO ist die Empty Base Optimization.<br />
In kurz: Leere Klassen (=nur (static) nicht virtuelle Funktionen und/oder Typedefs) haben in C++ die Größe (=sizeof) 1.<br />
Erbt man allerdings von ihnen, kann oft EBO angewendet und das Objekt komplett wegoptimiert werden.<br />
std::tuple&lt;&gt; scheint laut &quot;ebo&quot; leer zu sein, wenn man davon erbt hat man also keinen Overhead, falls jemand myclass ohne Argumente instantziiert.<br />
Anwenden würde ich das aber hier auch nicht, je nach Kontext ist es auch illegal keine Argumente anzugeben.</p>
</blockquote>
<p>das ist mal interessant zu wissen mit dem EBO. Das mit der vererbung mache ich deshalb weil ich schon mehrfach schlaue menschen habe sagen hören dass vererbung viel zu viel missbraucht wird und es oft viel schlauere lösungen gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412481</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Thu, 07 Aug 2014 22:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 06:41:28 GMT]]></title><description><![CDATA[<p>Es gibt da verschiedene Arten von Vererbung und nicht jede ist in jedem Kontext falsch oder schlecht.</p>
<pre><code>class Interface
{
public
    virtual void foo() = 0;
    virtual void bar() = 0;
};

class FooBar : public Interface
{
public
    virtual void foo(){}
    virtual void bar(){}

};
</code></pre>
<p>So eine Interface-implementierung (wie in Java) ist ok. Zumal diese Art der Verbung ja auch durch Template-Policys dargestellt wird.</p>
<pre><code>template&lt;class IF&gt;
class Widget
{
public:
    void callFoo()
    {
        IF x;
        x.foo();
    }

    void callBar()
    {
        IF x;
        x.Bar();
    }
};
</code></pre>
<p>(Ist zwar en doofes Beispiel, aber letztlich sieht man, dass der Typ, der in die Klasse geschoben wird, das Interface wie oben haben muss, sonst kompilierts nicht.)</p>
<p>Was viele allerdings unter Vererbung verstehen ist:</p>
<pre><code>class Ding
{
public:
    virtual void spezifischeMethode() {/*code*/} // virtual im nachhinein noch dran gepappt, damits &quot;läuft&quot;
};

class AnderesDing : public Ding
{
public:
    virtual void spezifischeMethode()
    {
        // Stuff ...
        Ding::spezifischeMethode();
        // Zeugs ...
    }
};
</code></pre>
<p>Und durch sowas blickst du ganz schnell nicht mehr durch. Und die Abhängigkeit zwischen Ding und AnderesDing ist so statisch und fest, da musst du selbst beim Refectorn richtig Zeit drauf verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412499</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 08 Aug 2014 06:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 06:55:45 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Es gibt da verschiedene Arten von Vererbung und nicht jede ist in jedem Kontext falsch oder schlecht.</p>
<pre><code>class Interface
{
public
    virtual void foo() = 0;
    virtual void bar() = 0;
};

class FooBar : public Interface
{
public
    virtual void foo(){}
    virtual void bar(){}

};
</code></pre>
<p>So eine Interface-implementierung (wie in Java) ist ok. Zumal diese Art der Verbung ja auch durch Template-Policys dargestellt wird.</p>
<pre><code>template&lt;class IF&gt;
class Widget
{
public:
    void callFoo()
    {
        IF x;
        x.foo();
    }

    void callBar()
    {
        IF x;
        x.Bar();
    }
};
</code></pre>
<p>(Ist zwar en doofes Beispiel, aber letztlich sieht man, dass der Typ, der in die Klasse geschoben wird, das Interface wie oben haben muss, sonst kompilierts nicht.)</p>
<p>Was viele allerdings unter Vererbung verstehen ist:</p>
<pre><code>class Ding
{
public:
    virtual void spezifischeMethode() {/*code*/} // virtual im nachhinein noch dran gepappt, damits &quot;läuft&quot;
};

class AnderesDing : public Ding
{
public:
    virtual void spezifischeMethode()
    {
        // Stuff ...
        Ding::spezifischeMethode();
        // Zeugs ...
    }
};
</code></pre>
<p>Und durch sowas blickst du ganz schnell nicht mehr durch. Und die Abhängigkeit zwischen Ding und AnderesDing ist so statisch und fest, da musst du selbst beim Refectorn richtig Zeit drauf verwenden.</p>
</blockquote>
<p>Ganz doofes Beispiel. Und befremdliche Behauptung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412502</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 08 Aug 2014 06:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 07:23:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Der Bestand aber nur aus &quot;Edit: War falsch&quot; oder so; jedenfalls als ich ihn gelesen habe.</p>
</blockquote>
<p>Ja, ich hatte vorgeschlagen bei einer leeren Liste zu spezialisieren und die Member zu noppen oder so, mir ist aber schnell aufgefallen das das Unsinn ist. Dann habe ich &quot;Edit: War falsch&quot; darein editiert und abgewartet ob noch jemand Bezug darauf nehmen möchte. Da das keiner in absehbarer Zeit getan hat, habe ich ihn als Platzverschwendung abgetan und gelöscht.</p>
<blockquote>
<p>je nach Kontext ist es auch illegal keine Argumente anzugeben.</p>
</blockquote>
<p>Wie meinst du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412506</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 07:49:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ganz doofes Beispiel. Und befremdliche Behauptung.</p>
</blockquote>
<p>Ich denke, wir können uns drauf einigen, keine Behauptung ohne Begründung abzugeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412511</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 07:50:25 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>je nach Kontext ist es auch illegal keine Argumente anzugeben.</p>
</blockquote>
<p>Wie meinst du das?</p>
</blockquote>
<p>Aus Sicht der Anwendung kanns Unfug sein. Wie leere Arrays oder vorzeichenlose 0-Bit-Zahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412512</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 07:53:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Aus Sicht der Anwendung kanns Unfug sein</p>
</blockquote>
<p>Ja, Unfug. Mich hat nur das Wörtchen illegal verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412513</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 08:09:09 GMT]]></title><description><![CDATA[<p>DANN FANG MAL AN!</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Es gibt da verschiedene Arten von Vererbung und nicht jede ist in jedem Kontext falsch oder schlecht.</p>
</blockquote>
<p>Leere Aussage, braucht keine Begründung, ok. Aber ich kann ja fragen, warum Du das gerade in den Vordergrund stellst: Warum?</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<pre><code>class Interface
{
public
    virtual void foo() = 0;
    virtual void bar() = 0;
};

class FooBar : public Interface
{
public
    virtual void foo(){}
    virtual void bar(){}

};
</code></pre>
<p>So eine Interface-implementierung (wie in Java) ist ok.</p>
</blockquote>
<p>Warum? Und ist es der Fall, daß Du Java-Stil gerade befürwortest? Warum? Und das Beispiel ist FooBar-Nichtssagend. Da keiner weiß, was FooBar ist, kann auch keiner wissen, ob hier &quot;Interface-implementierung&quot; passt.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Zumal diese Art der Verbung ja auch durch Template-Policys dargestellt wird.</p>
</blockquote>
<p>Warum? Und übrigens ist das gar nicht der Fall. Oberschwachsinn! Ah, das willste von mir bewiesen haben? Sorry, geht nicht. Hab gar keinen Ansatzpunkt, mir einfallen zu lassen, wo man das verwenden würde, um dann langsam aufzuzählen, warum es nix taugt.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<pre><code>template&lt;class IF&gt;
class Widget
{
public:
    void callFoo()
    {
        IF x;
        x.foo();
    }

    void callBar()
    {
        IF x;
        x.Bar();
    }
};
</code></pre>
</blockquote>
<p>*lachmichtot*<br />
Begründe mal, warum wer sowas schreiben sollte! Java-Leute, die Klassen als namespaces für freie Funktionen benutzen? Dir muss doch auffallen, daß man kein x nur deshalb erzeugt, um darauf eine statische Methode aufzurufen.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>(Ist zwar en doofes Beispiel, aber letztlich sieht man, dass der Typ, der in die Klasse geschoben wird, das Interface wie oben haben muss, sonst kompilierts nicht.)</p>
</blockquote>
<p>Warum? Warum? Warum?<br />
Die Behauptung ist doch vollkommen falsch.<br />
Langsam begreife ich, was dependency inversion ist. Das ist, wenn der Programmierer vollends aufgibt und fürderhin nur noch Unfug betreiben will.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Was viele allerdings unter Vererbung verstehen ist:</p>
<pre><code>class Ding
{
public:
    virtual void spezifischeMethode() {/*code*/} // virtual im nachhinein noch dran gepappt, damits &quot;läuft&quot;
};

class AnderesDing : public Ding
{
public:
    virtual void spezifischeMethode()
    {
        // Stuff ...
        Ding::spezifischeMethode();
        // Zeugs ...
    }
};
</code></pre>
<p>Und durch sowas blickst du ganz schnell nicht mehr durch. Und die Abhängigkeit zwischen Ding und AnderesDing ist so statisch und fest, da musst du selbst beim Refectorn richtig Zeit drauf verwenden.</p>
</blockquote>
<p>Ja, viele verstehen Vererbung unter Vererbung. Warum stellste das als was Abwegiges hin? Warum blicktst Du da schnell nicht mehr durch? Was stört an der statischen Abhängigkeit, verdammt nochmal! Die Kuh ist ein Säugetier und es wäre javaesk, das anders zu sagen. Warum brauchen wohl die Javaianier so viele Refactorung-Tools in der IDE?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412515</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 08 Aug 2014 08:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 10:50:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ja, viele verstehen Vererbung unter Vererbung. Warum stellste das als was Abwegiges hin? Warum blicktst Du da schnell nicht mehr durch? Was stört an der statischen Abhängigkeit, verdammt nochmal! Die Kuh ist ein Säugetier und es wäre javaesk, das anders zu sagen. Warum brauchen wohl die Javaianier so viele Refactorung-Tools in der IDE?</p>
</blockquote>
<p>Vielleicht meint er ja dass es oft nicht nötig ist so eine Abhängigkeit einzufügen, auch wenn eine Kuh ein Säugetier ist. Um mal bei dem Beispiel zu bleiben:</p>
<pre><code>struct Tier
{
	virtual int lautstaerke() const = 0;
};

struct Kuh : Tier
{
	virtual int lautstaerke() const { return 1; }
};

struct Hund : Tier
{
	virtual int lautstaerke() const { return 2; }
};

bool IstLauterAls(Tier const &amp;tier1, Tier const &amp;tier2)
{
	return tier1.lautstaerke() &gt; tier2.lautstaerke();
}

int main()
{
	Kuh kuh;
	Hund hund;
	IstLauterAls(kuh, hund);
}
</code></pre>
<p>kann man genauso gut mit templates machen:</p>
<pre><code>struct Kuh
{
	int lautstaerke() const { return 1; }
};

struct Hund
{
	int lautstaerke() const { return 2; }
};

template&lt;class First, class Second&gt;
bool IstLauterAls(First const &amp;first, Second const &amp;second)
{
	return first.lautstaerke() &gt; second.lautstaerke();
}

int main()
{
	Kuh kuh;
	Hund hund;
	IstLauterAls(kuh, hund);
}
</code></pre>
<p>Ist kürzer, perfromanter und funktioniert genauso gut. Es hat sogar noch die Vorteile dass man lokale Kopien in der Funktion anlegen kann<br />
(etwa um den internen State einer Kuh zu speichern) ohne jeden Nutzer zu zwingen eine clone-Methode implementieren zu müssen und dass man die IstLauterAls Funktion auch für Motoräder oder Kirchturmglocken verwenden könnte.</p>
<p>Also ich würde hier auf jeden Fall die template Variante nehmen, obwohl man eine &quot;Ist-Ein&quot; Beziehung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412540</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Fri, 08 Aug 2014 10:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 10:58:44 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Also ich würde hier auf jeden Fall die template Variante nehmen, obwohl man eine &quot;Ist-Ein&quot; Beziehung hat.</p>
</blockquote>
<p>Du hast überhaupt keine &quot;Ist-Ein&quot;-Beziehung.</p>
<p>Stopf mal die beiden Viecher in den selben Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412542</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 08 Aug 2014 10:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] transformation von variadic template types on Fri, 08 Aug 2014 11:01:55 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Du hast überhaupt keine &quot;Ist-Ein&quot;-Beziehung.</p>
<p>Stopf mal die beiden Viecher in den selben Container.</p>
</blockquote>
<p>Ne, ich meinte nicht dass ich programmiertechnisch eine &quot;Ist-Ein&quot;-Beziehung habe, sondern logisch: Eine Kuh ist ein Tier, ein Hund ist auch ein Tier. Trotzdem brauche ich diese Beziehung hier gar nicht, also kann ich sie mir auch sparen, das meinte ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412544</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Fri, 08 Aug 2014 11:01:55 GMT</pubDate></item></channel></rss>