<?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[[C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Die im Titel bereits angedeutete Funktion soll vor allem Schreibaufwand sparen, indem Klassen, die ihre Template-Typen für ihre Konstruktorargumente verwenden, einfacher erstellt werden können.</p>
<p>Einfaches Beispiel:</p>
<pre><code class="language-cpp">template&lt;typename T1, typename T2&gt; class Printer
{
    public:
    Printer(T1 t1, T2 t2)
    {
        std::cout &lt;&lt; t1 &lt;&lt; &quot; &quot; &lt;&lt; t2 &lt;&lt; &quot;\n&quot;;
    }
};

int main()
{
    auto var = make_var&lt;Printer&gt;(5, 6);
}
</code></pre>
<p>Mein Versuch für make_var() sieht so aus:</p>
<pre><code class="language-cpp">template&lt;template&lt;typename... Args&gt; class BaseTemplate, typename... Args&gt; BaseTemplate&lt;Args...&gt; make_var(Args &amp;&amp;... in)
{
    return BaseTemplate&lt;Args...&gt;(in...);
}
</code></pre>
<pre><code>error: no matching function for call to 'make_var(int, int)'
error: unable to deduce 'auto' from '&lt;expression error&gt;'
</code></pre>
<p>Auch wenn ich BaseTemplate direkt durch Printer ersetze, kommen Fehler:</p>
<pre><code class="language-cpp">template&lt;typename... Args&gt; Printer&lt;Args...&gt; make_var(Args &amp;&amp;... in)
{
    return Printer&lt;Args...&gt;(in...);
}
</code></pre>
<pre><code>error: wrong number of template arguments (1, should be 2)
error: provided for 'template&lt;class T1, class T2&gt; class Printer'
</code></pre>
<p>Weiß jemand, wie man make_var implementieren kann?</p>
<p>mfg<br />
wxSkip</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290783/c-0x-basetemplate-lt-args-gt-make_var-args-amp-amp-in-wie-geht-das</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 02:33:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290783.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Aug 2011 12:37:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 12:37:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Die im Titel bereits angedeutete Funktion soll vor allem Schreibaufwand sparen, indem Klassen, die ihre Template-Typen für ihre Konstruktorargumente verwenden, einfacher erstellt werden können.</p>
<p>Einfaches Beispiel:</p>
<pre><code class="language-cpp">template&lt;typename T1, typename T2&gt; class Printer
{
    public:
    Printer(T1 t1, T2 t2)
    {
        std::cout &lt;&lt; t1 &lt;&lt; &quot; &quot; &lt;&lt; t2 &lt;&lt; &quot;\n&quot;;
    }
};

int main()
{
    auto var = make_var&lt;Printer&gt;(5, 6);
}
</code></pre>
<p>Mein Versuch für make_var() sieht so aus:</p>
<pre><code class="language-cpp">template&lt;template&lt;typename... Args&gt; class BaseTemplate, typename... Args&gt; BaseTemplate&lt;Args...&gt; make_var(Args &amp;&amp;... in)
{
    return BaseTemplate&lt;Args...&gt;(in...);
}
</code></pre>
<pre><code>error: no matching function for call to 'make_var(int, int)'
error: unable to deduce 'auto' from '&lt;expression error&gt;'
</code></pre>
<p>Auch wenn ich BaseTemplate direkt durch Printer ersetze, kommen Fehler:</p>
<pre><code class="language-cpp">template&lt;typename... Args&gt; Printer&lt;Args...&gt; make_var(Args &amp;&amp;... in)
{
    return Printer&lt;Args...&gt;(in...);
}
</code></pre>
<pre><code>error: wrong number of template arguments (1, should be 2)
error: provided for 'template&lt;class T1, class T2&gt; class Printer'
</code></pre>
<p>Weiß jemand, wie man make_var implementieren kann?</p>
<p>mfg<br />
wxSkip</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101191</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 12:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 13:07:27 GMT]]></title><description><![CDATA[<p>Ich würde es so (ungetestet) machen:</p>
<pre><code class="language-cpp">template
&lt;
    template &lt;typename...&gt; class T,
    typename... Args
&gt;
T&lt;Args...&gt; make_var(Args&amp;&amp;... args)
{
    return T&lt;Args...&gt;(std::forward&lt;Args&gt;(args)...);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2101207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101207</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 03 Aug 2011 13:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 13:09:28 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich würde es so (ungetestet) machen:</p>
<pre><code class="language-cpp">template
&lt;
    template &lt;typename...&gt; class T,
    typename... Args
&gt;
T&lt;Args...&gt; make_var(Args&amp;&amp;... args)
{
    return T&lt;Args...&gt;(std::forward&lt;Args&gt;(args)...);
}
</code></pre>
</blockquote>
<p>Genau der gleiche Fehler, denn außer dem std::forward und dem nicht-Angeben von Args bei class T hast du ja auch nichts geändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101208</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 13:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 13:31:13 GMT]]></title><description><![CDATA[<p>Das ist ein Fall von <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35722" rel="nofollow">GCC Bug #35722</a><br />
Als workaround (dort zu finden) geht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;utility&gt;

template&lt;typename T1, typename T2&gt;
class Printer
{
public:
    Printer(T1 t1, T2 t2)
    {
        std::cout &lt;&lt; t1 &lt;&lt; &quot; &quot; &lt;&lt; t2 &lt;&lt; &quot;\n&quot;;
    }
};

template&lt;template &lt;typename...&gt; class T, typename... Args&gt;
struct Join
{
    typedef T&lt;Args...&gt; type;
};

template &lt;template &lt;typename...&gt; class T, typename... Args&gt;
typename Join&lt;T, Args...&gt;::type make_var(Args&amp;&amp;... args)
{
    return typename Join&lt;T, Args...&gt;::type(std::forward&lt;Args&gt;(args)...);
}

int main()
{
    auto var = make_var&lt;Printer&gt;(5, 6);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2101226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101226</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 03 Aug 2011 13:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 14:07:04 GMT]]></title><description><![CDATA[<p>Man darf nicht vergessen, dass beim Muster Arg&amp;&amp; wobei Arg deduziert wird, für Arg ein Lvalue-Referenz-Typ rauskommen kann.</p>
<p>Wenn man bei Lvalues kein Printer&lt;int&amp;,int&amp;&gt;-Objekt bekommen möchte und bei konstanten Ausdrücken das const stört, sollte man folgendes schreiben:</p>
<pre><code class="language-cpp">Join&lt;T, typename std::decay&lt;Args&gt;::type ... &gt;::type
</code></pre>
<p>So ähnlich arbeitet zB auch make_tuple. Also,</p>
<pre><code class="language-cpp">int i = 3;
auto x = make_tuple(i,3.1415);
</code></pre>
<p>macht aus x ein tuple&lt;int,double&gt; und kein tuple&lt;int&amp;,double&gt; obwohl der entsprechende Templateparameter des make_tuple-Templates als int&amp; deduziert wird; denn i ist ein Lvalue. Die Sonderbehandlung bei make_tuple bzgl reference_wrapper&lt;&gt; verschweige ich jetzt mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101243</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 03 Aug 2011 14:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 18:28:37 GMT]]></title><description><![CDATA[<p>Danke camper und krümelkracker!<br />
@krümelkracker: Wusste gar nicht, dass man T &amp; &amp;&amp; schreiben kann... Ich habe extra die rvalue-Referenz hingesetzt, um lvalue-Referenzen zu vermeiden.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Ich hatte sogar noch einen GCC-Bug mit variadic templates im Hinterkopf - wusste aber nicht mehr genau, worum es dabei ging.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101364</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 18:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 18:37:34 GMT]]></title><description><![CDATA[<p>Könnte man jetzt auch noch <code>make_var&lt;Printer, true, false, 5&gt;(1, 7)</code> schreiben, was dann einen <code>Printer&lt;true, false, 5, int, int&gt;(1,7)</code> zurückgibt?<br />
<code>template&lt;typename... Types&gt; Types... template_values</code> funktioniert schon einmal nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101377</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 18:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 19:18:29 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>@krümelkracker: Wusste gar nicht, dass man T &amp; &amp;&amp; schreiben kann...</p>
</blockquote>
<p>Kann man auch nicht -- also &amp; und &amp;&amp; direkt hintereinander im Quelltext. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
Aber man kann T &amp;&amp; schreiben, auch wenn T=int&amp; gilt. Der Effekt: T&amp;&amp;=int&amp; (&quot;reference collapsing&quot;). Ist ein &amp; dabei, &quot;drückt sich das durch&quot;. Sonst bleibt's &amp;&amp;.</p>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Ich habe extra die rvalue-Referenz hingesetzt, um lvalue-Referenzen zu vermeiden.</p>
</blockquote>
<p>Dann bist Du -- so wie viele andere -- in die komische-Perfect-Forwarding-erlaubende-Deduktionsregel-Falle gelaufen; denn T&amp;&amp; fängt alles, falls T deduziert wird -- sowohl Rvalues als auch Lvalues.</p>
<pre><code class="language-cpp">template&lt;class T&gt; void demo(T&amp;&amp;) {}
int main() {
  int i = 42;
  demo(i); // --&gt; T = int&amp;, T&amp;&amp; = int&amp;
  demo(6); // --&gt; T = int , T&amp;&amp; = int&amp;&amp;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2101420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101420</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 03 Aug 2011 19:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 19:56:53 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Könnte man jetzt auch noch <code>make_var&lt;Printer, true, false, 5&gt;(1, 7)</code> schreiben, was dann einen <code>Printer&lt;true, false, 5, int, int&gt;(1,7)</code> zurückgibt?<br />
<code>template&lt;typename... Types&gt; Types... template_values</code> funktioniert schon einmal nicht.</p>
</blockquote>
<p>Du müsstest für jede Anzahl an Compiletime-Argumenten eine Überladung schreiben, da man nicht mehr als 1 typename... in einem template haben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101445</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 03 Aug 2011 19:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 20:16:46 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Könnte man jetzt auch noch <code>make_var&lt;Printer, true, false, 5&gt;(1, 7)</code> schreiben, was dann einen <code>Printer&lt;true, false, 5, int, int&gt;(1,7)</code> zurückgibt?<br />
<code>template&lt;typename... Types&gt; Types... template_values</code> funktioniert schon einmal nicht.</p>
</blockquote>
<p>Du müsstest für jede Anzahl an Compiletime-Argumenten eine Überladung schreiben, da man nicht mehr als 1 typename... in einem template haben kann.</p>
</blockquote>
<p>Könnte man dann eine Ersatzlösung wie <code>make_var&lt;Printer, ValueHolder&lt;true, false, 5&gt; &gt;(1, 7)</code> verwenden? Konkret geht es mir um die Implementierung von ValueHolder bzw. wie kann ich es vermeiden <code>TypeHolder&lt;bool, bool, int&gt;::ValueHolder&lt;true, false, 5&gt;</code> schreiben zu müssen?</p>
<p>EDIT: Einfacher wäre wohl <code>ValueHolder&lt;true, false, 5&gt;::make_var&lt;Printer&gt;(1, 7)</code> . Das ändert allerdings nichts am Problem der impliziten Typerkennung bei Template-Wert-Argumenten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101450</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 20:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 20:30:04 GMT]]></title><description><![CDATA[<p>Ich muss mich selbst korrigieren, nicht mal mit Überladung ist das lösbar. Zu deinem Edit: Muss ich mal nachdenken und evtl das heilige IRC befragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101469</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 03 Aug 2011 20:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 20:31:23 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich muss mich selbst korrigieren, nicht mal mit Überladung ist das lösbar. Zu deinem Edit: Muss ich mal nachdenken und evtl das heilige IRC befragen.</p>
</blockquote>
<p>Was ist denn das IRC? Wenn ich danach suche, finde ich bloß den hiesigen Foren-Channel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101471</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 03 Aug 2011 20:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 20:35:06 GMT]]></title><description><![CDATA[<p>Internet Relay Chat <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2101474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101474</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 03 Aug 2011 20:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Wed, 03 Aug 2011 20:44:40 GMT]]></title><description><![CDATA[<p>Das zweite ist auch nicht möglich, aus dem selben Grund wie das erste - Du kannst kein template machen, das beliebige Compiletime-Werte schluckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101479</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 03 Aug 2011 20:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 13:10:35 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Das zweite ist auch nicht möglich, aus dem selben Grund wie das erste - Du kannst kein template machen, das beliebige Compiletime-Werte schluckt.</p>
</blockquote>
<p>Ich habe schon versucht, den zusätzlichen Schreibaufwand bei der TypeHolder-Variante durch ein Makro mit decltype() und einer Funktion, die den TypeHolder-Typ zurückliefert, zu umgehen, aber dann kam ich auf Fehler bei Join bei <code>typedef T&lt;values..., Args...&gt; type;</code> (der Bug) und <code>template&lt;ValueTypes..., typename...&gt; class T</code> (anderer Fehler), sodass ich es jetzt mit einer für mich verwendbaren Alternative (die IMHO beim Aufruf auch schöner aussieht) versuche:</p>
<pre><code class="language-cpp">template&lt;bool b1, int i1&gt; class Holder
{
    public:
    template&lt;typename T1, typename T2&gt; class Printer
    {
        public:
        Printer(T1 t1, T2 t2)
        {
            std::cout &lt;&lt; b1 &lt;&lt; &quot; &quot; &lt;&lt; i1 &lt;&lt; &quot; &quot; &lt;&lt; t1 &lt;&lt; &quot; &quot; &lt;&lt; t2 &lt;&lt; &quot;\n&quot;;
        }
    };
};

template&lt;template&lt;typename...&gt; class T, typename... Args&gt;
struct Join
{
    typedef T&lt;Args...&gt; type;
};

template &lt;template&lt;typename...&gt; class T, typename... Args&gt;
static typename Join&lt;T, typename std::decay&lt;Args&gt;::type...&gt;::type
    make_var(Args&amp;&amp;... args)
{
    return typename Join&lt;T, typename std::decay&lt;Args&gt;::type...&gt;::type(std::forward&lt;Args&gt;(args)...);
}

int main()
{
    auto var = make_var&lt;Holder&lt;true, 5&gt;::Printer&gt;(5, 6);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2101738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101738</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Thu, 04 Aug 2011 13:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 15:47:54 GMT]]></title><description><![CDATA[<p>Vielleicht wäre ja das hier etwas für dich:</p>
<pre><code class="language-cpp">template &lt;bool b, int i, typename T0, typename T1&gt;
struct printer
{
    printer(T0 t0, T1 t1)
    {
        std::cout &lt;&lt; t0 &lt;&lt; b &lt;&lt; t1 &lt;&lt; i;
    }
};

template
&lt;
    template &lt;bool, int, typename...&gt; class T,
    bool B,
    int I,
    typename... Args
&gt;
struct join
{
    typedef T&lt;B, I, Args...&gt; type;
};

template &lt;bool B, int I, typename... Args&gt;
typename join&lt;printer, B, I, typename std::decay&lt;Args&gt;::type...&gt;::type make_printer(Args&amp;&amp;... args)
{
    return typename join&lt;printer, B, I, typename std::decay&lt;Args&gt;::type...&gt;::type(std::forward&lt;Args&gt;(args)...);
}
</code></pre>
<p>Der Aufruf sieht dann einfach so aus:</p>
<pre><code class="language-cpp">make_printer&lt;true, 42&gt;(3.14, 666);
</code></pre>
<p>Hier sind allerdings die ersten beiden Template-Parameter immer bool und int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101796</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 15:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 15:50:07 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Vielleicht wäre ja das hier etwas für dich:</p>
<pre><code class="language-cpp">template &lt;bool b, int i, typename T0, typename T1&gt;
struct printer
{
    printer(T0 t0, T1 t1)
    {
        std::cout &lt;&lt; t0 &lt;&lt; b &lt;&lt; t1 &lt;&lt; i;
    }
};
 
template
&lt;
    template &lt;bool, int, typename...&gt; class T,
    bool B,
    int I,
    typename... Args
&gt;
struct join
{
    typedef T&lt;B, I, Args...&gt; type;
};
 
template &lt;bool B, int I, typename... Args&gt;
typename join&lt;printer, B, I, typename std::decay&lt;Args&gt;::type...&gt;::type make_printer(Args&amp;&amp;... args)
{
    return typename join&lt;printer, B, I, typename std::decay&lt;Args&gt;::type...&gt;::type(std::forward&lt;Args&gt;(args)...);
}
</code></pre>
<p>Der Aufruf sieht dann einfach so aus:</p>
<pre><code class="language-cpp">make_printer&lt;true, 42&gt;(3.14, 666);
</code></pre>
<p>Hier sind allerdings die ersten beiden Template-Parameter immer bool und int.</p>
</blockquote>
<p>Danke, aber ich brauche es dynamisch (sowohl für das Basis-Template als auch für die Werte).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101799</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Thu, 04 Aug 2011 15:50:07 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 15:55:50 GMT]]></title><description><![CDATA[<p>Muss denn die Anzahl an möglichen Compile-Time Argumenten auch variabel sein oder sind es immer nur 2?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101806</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 15:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 15:56:15 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Danke, aber ich brauche es dynamisch (sowohl für das Basis-Template als auch für die Werte).</p>
</blockquote>
<p>Wie dynamisch? Wenn B und I nicht beim Compilieren bekannt sind, können sie keine Templateparameter sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101807</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 04 Aug 2011 15:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] BaseTemplate&amp;lt;Args...&amp;gt; make_var(Args &amp;amp;&amp;amp;... in) - wie geht das? on Thu, 04 Aug 2011 21:58:43 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Danke, aber ich brauche es dynamisch (sowohl für das Basis-Template als auch für die Werte).</p>
</blockquote>
<p>Wie dynamisch? Wenn B und I nicht beim Compilieren bekannt sind, können sie keine Templateparameter sein.</p>
</blockquote>
<p>Ich meinte, die Anzahl und die Typen sollen dynamisch, also Compiletime-Abhängig und nicht hardgecoded sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102043</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Thu, 04 Aug 2011 21:58:43 GMT</pubDate></item></channel></rss>