<?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[template Argument im Konstruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich diesen Code habe:</p>
<pre><code>template &lt;typename T&gt;
struct test
{
	T2 val; // &lt;- Problem

	template &lt;typename T2&gt; explicit test(T2 val_) : val(val_)
	{

	}
};
</code></pre>
<p>erhalte ich ja einen Fehler, weil T im Scope von test nicht bekannt ist. Allerdings frage ich mich jetzt ob man dem Compiler nicht irgendwie sagen kann dass er den Typ von T auch außerhalb des Konstruktors verwendet? Denn ohne einen expliziten Konstruktor aufruf mit Parameter kann ja auch gar kein Objekt von test erstellt werden, also müssen zum Zeitpunkt der Instanziierung von test ja auch schon alle Typnamen vorliegen, oder?</p>
<p>Natürlich könnte ich das template &lt;typename T&gt; auch vor das struct ziehen, also so:</p>
<pre><code>template &lt;typename T, typename T2&gt; struct test
{
	T2 val;

	explicit test(T2 val_) : val(val_)
	{

	}
};
</code></pre>
<p>Allerdings muss ich das Template Argument dann immer mit angeben, was ich hier vermeiden will:</p>
<pre><code>test&lt;int, double&gt; t(2.5); // Das wäre mit expliziter Angabe des Template-Arguments
test&lt;int&gt; t(2.5); // So hätte ich es gerne
</code></pre>
<p>Die explizite Angabe des template Arguments finde ich hier nervig und redundant, da ja durch den Parameter 2.5 dessen Typ bereits festgelegt wird.</p>
<p>Ist das irgendwie möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326703/template-argument-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 15:04:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326703.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jul 2014 11:48:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 11:49:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich diesen Code habe:</p>
<pre><code>template &lt;typename T&gt;
struct test
{
	T2 val; // &lt;- Problem

	template &lt;typename T2&gt; explicit test(T2 val_) : val(val_)
	{

	}
};
</code></pre>
<p>erhalte ich ja einen Fehler, weil T im Scope von test nicht bekannt ist. Allerdings frage ich mich jetzt ob man dem Compiler nicht irgendwie sagen kann dass er den Typ von T auch außerhalb des Konstruktors verwendet? Denn ohne einen expliziten Konstruktor aufruf mit Parameter kann ja auch gar kein Objekt von test erstellt werden, also müssen zum Zeitpunkt der Instanziierung von test ja auch schon alle Typnamen vorliegen, oder?</p>
<p>Natürlich könnte ich das template &lt;typename T&gt; auch vor das struct ziehen, also so:</p>
<pre><code>template &lt;typename T, typename T2&gt; struct test
{
	T2 val;

	explicit test(T2 val_) : val(val_)
	{

	}
};
</code></pre>
<p>Allerdings muss ich das Template Argument dann immer mit angeben, was ich hier vermeiden will:</p>
<pre><code>test&lt;int, double&gt; t(2.5); // Das wäre mit expliziter Angabe des Template-Arguments
test&lt;int&gt; t(2.5); // So hätte ich es gerne
</code></pre>
<p>Die explizite Angabe des template Arguments finde ich hier nervig und redundant, da ja durch den Parameter 2.5 dessen Typ bereits festgelegt wird.</p>
<p>Ist das irgendwie möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406660</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 02 Jul 2014 11:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 11:53:22 GMT]]></title><description><![CDATA[<p>Du redest von T und im Code steht T2. Davon ausgehend dass T2 irgendwie als template&lt;class T&gt; T2; deklarierst ist kannst du den Parameter einfach angeben:</p>
<pre><code>template &lt;typename T&gt;
struct test
{
    T2&lt;double&gt; val; // &lt;- Problem gelöst?
    T2&lt;T&gt; val2; // &lt;- oder so?

    template &lt;typename T2&gt; explicit test(T2 val_) : val(val_)
    {

    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406662</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 02 Jul 2014 11:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 11:55:02 GMT]]></title><description><![CDATA[<p>Nein anders.</p>
<p>Du willst ja eigentlich ein Datum speichern, aber bei der Objekterzeugung möchtest du auch alle Datentypen reingeben können, die implizit zu deinem Typ gecastet werden können:</p>
<pre><code>template&lt;class T&gt;
struct Test
{
	T val;

	template&lt;class P&gt;
	Test(P x) : val(x)
	{}
};

struct Foo
{};

struct Bar
{};

int main()
{
	Test&lt;long&gt; t1{5}; // OK
	Test&lt;double&gt; t2{3.1415f}; // OK

	//Test&lt;Foo&gt; t3{Bar{}}; // Fail

	return 0;
}
</code></pre>
<p>Nachtrag: Alles was nicht impliziet castbar ist, wirft einen Fehler (wie die auskommentierte Zeile zeigt). Alles implizit castbare klappt anstandslos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406663</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 02 Jul 2014 11:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 11:55:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T, typename T2&gt; struct test
{
    T2 val;

    explicit test(T2 val) : val(val)
    {
    }
};

template &lt;typename T, typename T2&gt;
test&lt;T,T2&gt; make_test(T2 val)
{
    return {val};
}

auto t = make_test&lt;int&gt;(2.5);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406665</guid><dc:creator><![CDATA[make&amp;lt;auto&amp;gt;]]></dc:creator><pubDate>Wed, 02 Jul 2014 11:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 12:23:05 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Nachtrag: Alles was nicht impliziet castbar ist, wirft einen Fehler (wie die auskommentierte Zeile zeigt). Alles implizit castbare klappt anstandslos.</p>
</blockquote>
<p>Hm ja, also das sollte halt auch mit nicht cast-baren Typen klappen...</p>
<p>make&lt;auto&gt; schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename T, typename T2&gt; struct test
{
    T2 val;
 
    explicit test(T2 val) : val(val)
    {
    }
};

template &lt;typename T, typename T2&gt;
test&lt;T,T2&gt; make_test(T2 val)
{
    return {val};
}

auto t = make_test&lt;int&gt;(2.5);
</code></pre>
</blockquote>
<p>Also das klappt schonmal... Wäre zwar schöner wenn sich der Compiler das selbst zusammen reimen könnte, aber dann halt so^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406669</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 02 Jul 2014 12:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 12:27:28 GMT]]></title><description><![CDATA[<p>Das kommt halt drauf an, was du vor hast.</p>
<p>Wenn du wirklich einen weiteren Typ als Member halten willst, dann musst du diesen natürlich (und da führt kein Weg dran vorbei) in der Template Parameter Liste (wie heisst das Ding eig?) aufführen.</p>
<p>Mich persönlich nervts auch manchmal, dass man bei der Instanziierung eines Klassentemplates alle Typen angeben muss, aber dafür nutzt man heute erzeugende FUnktionen und auto. Also so wie make&lt;auto&gt; es gezeigt hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406673</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 02 Jul 2014 12:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Wed, 02 Jul 2014 12:35:32 GMT]]></title><description><![CDATA[<p>@make&lt;auto&gt;: Dein Code ist falsch. copy-list-initialization ist implizit, der Konstruktor ist aber <code>explicit</code> .</p>
<p>Edit: @happy: So muss es aussehen:</p>
<pre><code>template &lt;typename T, typename T2&gt;
test&lt;T,T2&gt; make_test(T2 val)
{
    return test&lt;T, T2&gt;{ val };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406675</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 02 Jul 2014 12:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Thu, 03 Jul 2014 08:27:10 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<pre><code>template &lt;typename T&gt;
struct test
{
	T2 val; // &lt;- Problem

	template &lt;typename T2&gt; explicit test(T2 val_) : val(val_)
	{

	 }
};
</code></pre>
</blockquote>
<p>Finde das ganze Unterfangen fragwürdig. Wenn du mal genau drüber anchdenkst macht das garkein Sinn was da steht. Entweder du hast cast-bare Typen, dann was Skym0sh0 schrieb. Oder, du hast einen von T ableitbaren Typen, dann Traits:</p>
<pre><code>template &lt;typename T, typename Traits=default_traits&lt;T&gt;&gt;
struct test
{
        typedef typename Traits::t2_type t2_type;
	t2_type val; // &lt;- kein Problem

	explicit test(t2_type val_) : val(val_)
	{

	}
};
</code></pre>
<p>Oder dein Type hängt schlicht und einfach von zwei Parametern ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406770</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Thu, 03 Jul 2014 08:27:10 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Thu, 03 Jul 2014 17:04:01 GMT]]></title><description><![CDATA[<p>ScottZhang schrieb:</p>
<blockquote>
<p>Finde das ganze Unterfangen fragwürdig. Wenn du mal genau drüber anchdenkst macht das garkein Sinn was da steht. Entweder du hast cast-bare Typen, dann was Skym0sh0 schrieb. Oder, du hast einen von T ableitbaren Typen, dann Traits:</p>
<pre><code>template &lt;typename T, typename Traits=default_traits&lt;T&gt;&gt;
struct test
{
        typedef typename Traits::t2_type t2_type;
	t2_type val; // &lt;- kein Problem

	explicit test(t2_type val_) : val(val_)
	{

	}
};
</code></pre>
<p>Oder dein Type hängt schlicht und einfach von zwei Parametern ab.</p>
</blockquote>
<p>Was ist bitte <code>default_traits&lt;T&gt;</code> ?</p>
<p>Das existiert bei mir nicht, auch nicht nach includen von &lt;type_traits&gt; und in der <a href="http://www.cplusplus.com/reference/type_traits/" rel="nofollow">Doku</a> wird es auch nirgends aufgeführt. Bei Google finde ich mittels &quot;C++ default_trait&quot; auch nichts...</p>
<p>Und wieso soll das Unterfangen &quot;fragwürdig&quot; sein? Template Funktionen können sich ja auch selber die jeweiligen Typen erschließen, wäre nur konsistent wenn Klassen das auch könnten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406890</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 03 Jul 2014 17:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Fri, 04 Jul 2014 13:35:50 GMT]]></title><description><![CDATA[<p>Das klingt deshalb fragwürdig, weil dein Klassen so vom jeweiligen Aufruf des Konstruktors abhängt (nicht der Zustand sonder die Klasse selbst).</p>
<p>Mit <strong>default_traits</strong> meine ich einfach nur deine Abhängigkeit des Types T2 von T. Das müsstest du selber natürlich noch vorgeben. Du kannst das auch fest in die Klasse verbasteln ohne zweiten Templateparameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407012</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Fri, 04 Jul 2014 13:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Sat, 05 Jul 2014 11:15:16 GMT]]></title><description><![CDATA[<p>ScottZhang schrieb:</p>
<blockquote>
<p>Das klingt deshalb fragwürdig, weil dein Klassen so vom jeweiligen Aufruf des Konstruktors abhängt (nicht der Zustand sonder die Klasse selbst).</p>
</blockquote>
<p>Ja und? Ganz ehrlich, wo ist dabei jetzt das Problem, bei template Funktionen funktioniert es ja ganz genauso?</p>
<p>ScottZhang schrieb:</p>
<blockquote>
<p>Mit <strong>default_traits</strong> meine ich einfach nur deine Abhängigkeit des Types T2 von T. Das müsstest du selber natürlich noch vorgeben. Du kannst das auch fest in die Klasse verbasteln ohne zweiten Templateparameter.</p>
</blockquote>
<p>Aber ein Typ T ist ja nicht unbedingt abhängig von T2 bzw. soll explizit nicht abhängig davon sein. Wenn ich etwas wie std::tuple etwa habe:</p>
<pre><code>// std::tuple&lt;T1, T2, T3, T4&gt;
std::tuple&lt;int, const char*, double, char&gt; t(1, &quot;test&quot;, 2.5, 'c');
</code></pre>
<p>Wieso sollte hier T2 (ein string) auch nur irgendwie mit T1 (einem int) zusammenhängen? Dabei ist die kilometerlange template-Argument Liste doch völlig unnötig und redundant, da durch die Argumente des Konstruktors bereits festgelegt ist welchen Typ T1 bis T4 haben sollen. Viel schöner wäre doch:</p>
<pre><code>// std::tuple&lt;T1, T2, T3, T4&gt;
std::tuple t(1, &quot;test&quot;, 2.5, 'c');
</code></pre>
<p>Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround. Besser wärs doch wenn das direkt von der Sprache unterstützt werden würde, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407089</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sat, 05 Jul 2014 11:15:16 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Sat, 05 Jul 2014 12:29:58 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Ja und? Ganz ehrlich, wo ist dabei jetzt das Problem, bei template Funktionen funktioniert es ja ganz genauso?</p>
</blockquote>
<p>Und wo genau ist der Unterschied zwischen einem Klassentemplate und einem Funktionstemplate? Achja...</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround. Besser wärs doch wenn das direkt von der Sprache unterstützt werden würde, oder?</p>
</blockquote>
<p>Syntax sugar in die Sprache integrieren?</p>
<p>Und überhaupt, wenn die Klassentemplate-Argumente vom Konstruktor deduziert werden sollen:</p>
<pre><code>template&lt;typename T&gt;
struct Foo
{
	Foo(T);
	Foo(int);
};
Foo Bar(42); // Was hier?
// Fehler nur bei int oder bei allen Typen? Was ist mit in int konvertierbare Typen?
//------------------------
template&lt;typename T&gt;
struct Foo
{
	Foo(T);
};
template&lt;&gt;
struct Foo&lt;int&gt;
{
};
Foo Bar(42); // Was hier? Spezialisierungen pauschal ausschliessen?
//------------------------
template&lt;typename T&gt;
struct Foo
{
};
template&lt;&gt;
struct Foo&lt;int&gt;
{
	Foo(int);
};
Foo Bar(42); // Was hier?
//------------------------
template&lt;typename T&gt;
struct Foo
{
	Foo(T)
};
template&lt;&gt;
struct Foo&lt;int&gt;
{
	Foo(int);
};
Foo Bar(42); // Oh nein, ich wurde zu Unrecht ausgeschlossen...
//------------------------
template&lt;typename T&gt;
struct Foo
{
	template&lt;typename U&gt;
	Foo(U);
	Foo(T);
};
Foo Bar(42); // Was hier?
</code></pre>
<p>Für mich sieht das alles tödlich inkonsistent aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407100</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Sat, 05 Jul 2014 12:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Sat, 05 Jul 2014 13:08:25 GMT]]></title><description><![CDATA[<p>Ok, wenn der Konstruktor auch noch templates hat, dann würde das nicht funktionieren, das stimmt. Daran hatte ich nicht gedacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407102</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sat, 05 Jul 2014 13:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Sat, 05 Jul 2014 14:38:08 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<pre><code>template &lt;typename T&gt;
struct test
{
	T2 val; // &lt;- Problem

	template &lt;typename T2&gt; explicit test(T2 val_) : val(val_)
	{

	}
};
</code></pre>
</blockquote>
<p>Ich versuche mich mal an einer Erklärung.</p>
<p>Man stelle sich einmal vor, jemand schreibt eine Funktion:</p>
<pre><code>void foo(const test&lt;int&gt;&amp; f) {
  // irgendwas
}
</code></pre>
<p>Welchen Typ hat <code>f.val</code> jetzt? Die Funktion ist ja explizit keine Template-Funktion, sondern arbeitet mit dem eigentlich voll qualifizierten Typ <code>test&lt;int&gt;</code> .</p>
<p>Ein Aufruf könnte jetzt aber so erfolgen:</p>
<pre><code>foo(test&lt;int&gt;(&quot;Hi&quot;));
foo(test&lt;int&gt;(17));
</code></pre>
<p>Im ersten Fall müsste <code>f.val</code> vom Typ <code>const char*</code> sein aber im 2. Fall ein <code>int</code> . Und das obwohl doch foo selbst keine Template-Funktion ist. Also kann das nicht funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407116</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Sat, 05 Jul 2014 14:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to template Argument im Konstruktor on Sun, 06 Jul 2014 09:56:03 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>ScottZhang schrieb:</p>
<blockquote>
<p>Das klingt deshalb fragwürdig, weil dein Klassen so vom jeweiligen Aufruf des Konstruktors abhängt (nicht der Zustand sonder die Klasse selbst).</p>
</blockquote>
<p>Ja und? Ganz ehrlich, wo ist dabei jetzt das Problem, bei template Funktionen funktioniert es ja ganz genauso?</p>
</blockquote>
<p>Der Type des Objekt muss vollständig sein bevor man damit irgendwas macht. Ich mein wie stellst du dir das vor? Du erzeugts zwei Objekte vom gleichen Type und anch dem Aufruf des Konstruktors haben sie nicht mehr den gleichen Type, hää?<br />
Denk doch mal nach.</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>ScottZhang schrieb:</p>
<blockquote>
<p>Mit <strong>default_traits</strong> meine ich einfach nur deine Abhängigkeit des Types T2 von T. Das müsstest du selber natürlich noch vorgeben. Du kannst das auch fest in die Klasse verbasteln ohne zweiten Templateparameter.</p>
</blockquote>
<p>Aber ein Typ T ist ja nicht unbedingt abhängig von T2 bzw. soll explizit nicht abhängig davon sein. Wenn ich etwas wie std::tuple etwa habe:</p>
<pre><code>// std::tuple&lt;T1, T2, T3, T4&gt;
std::tuple&lt;int, const char*, double, char&gt; t(1, &quot;test&quot;, 2.5, 'c');
</code></pre>
<p>Wieso sollte hier T2 (ein string) auch nur irgendwie mit T1 (einem int) zusammenhängen? Dabei ist die kilometerlange template-Argument Liste doch völlig unnötig und redundant, da durch die Argumente des Konstruktors bereits festgelegt ist welchen Typ T1 bis T4 haben sollen. Viel schöner wäre doch:</p>
<pre><code>// std::tuple&lt;T1, T2, T3, T4&gt;
std::tuple t(1, &quot;test&quot;, 2.5, 'c');
</code></pre>
<p>Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround. Besser wärs doch wenn das direkt von der Sprache unterstützt werden würde, oder?</p>
</blockquote>
<p>Ganz ehrlich, über die Abhängigkeiten deiner Typen musst du dir schon selbst im klaren sein, nicht wir. Bei Tupel hast du auch N Parameter für den Typen. Das wolltes du ja gerade nicht. Also muss sich T2 ja wohl irgendwie aus T ergeben oder nicht. Ansonsten wäre ja doch wieder die explizite Abhängigkeit deienr Klasse von T2 gegeben. Ne Hilfsfunktion wie make_tupel, die die Typededuktion nutzt um die Tipparbeit zu sparen kannst du dir auch ganz leicht schreiben.</p>
<p>happystudent schrieb:</p>
<blockquote>
<p>Mit auto und einer make_xyz Funktion kommt man dem schon recht nahe, das ist ja letztendlich auch nur ein Workaround.</p>
</blockquote>
<p>Das ist kein Workaround. Ein Workaround für was denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407205</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Sun, 06 Jul 2014 09:56:03 GMT</pubDate></item></channel></rss>