<?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[compile-time objektauswahl?]]></title><description><![CDATA[<p>konzeptionell benötige ich so etwas:</p>
<pre><code class="language-cpp">// #inlcude benötigte mpl-header
using namespace boost::mpl;

template&lt;long n, typename T0, typename T1, typename T2, typename T3&gt;
typename at_c&lt;
        vector&lt; T0, T1, T2, T3 &gt;,
        n
    &gt;::type
return_nth(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3)
{
    switch ( n )
    {
        case 0: return t0;
        case 1: return t1;
        case 2: return t2;
        case 3: return t3;
    };
}
</code></pre>
<p>das geht so nat. nicht - ich könnte das ganze durch overloading erreichen, das möchte ich aber unbedingt vermeiden - immerhin brauche ich das ganze bereits für eine beliebige anzahl von argumenten (4 ist hier nur ein beispiel), so das allein dadurch eine menge overloads existieren. irgendwelche ideen, wie das elegant zu lösen wäre?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131217/compile-time-objektauswahl</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 01:50:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131217.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Jan 2006 15:13:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to compile-time objektauswahl? on Sun, 01 Jan 2006 15:14:16 GMT]]></title><description><![CDATA[<p>konzeptionell benötige ich so etwas:</p>
<pre><code class="language-cpp">// #inlcude benötigte mpl-header
using namespace boost::mpl;

template&lt;long n, typename T0, typename T1, typename T2, typename T3&gt;
typename at_c&lt;
        vector&lt; T0, T1, T2, T3 &gt;,
        n
    &gt;::type
return_nth(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3)
{
    switch ( n )
    {
        case 0: return t0;
        case 1: return t1;
        case 2: return t2;
        case 3: return t3;
    };
}
</code></pre>
<p>das geht so nat. nicht - ich könnte das ganze durch overloading erreichen, das möchte ich aber unbedingt vermeiden - immerhin brauche ich das ganze bereits für eine beliebige anzahl von argumenten (4 ist hier nur ein beispiel), so das allein dadurch eine menge overloads existieren. irgendwelche ideen, wie das elegant zu lösen wäre?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/954065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/954065</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 01 Jan 2006 15:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to compile-time objektauswahl? on Sun, 01 Jan 2006 15:26:11 GMT]]></title><description><![CDATA[<p>Hmm, wenn du mit dem zurückgegebenen Objekt dann noch (sinnvoll) arbeiten willst, müssen {T(n)} eh in einer Hierarchie sein, was das ganze doch ein wenig abwandelt. Variable Argumentzahl kannst du glaub ich knicken, das klappt mit C++ nicht.<br />
Könntest du vielleicht den Kontext erläutern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/954083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/954083</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sun, 01 Jan 2006 15:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to compile-time objektauswahl? on Sun, 01 Jan 2006 15:29:25 GMT]]></title><description><![CDATA[<p>machs komplett anders</p>
]]></description><link>https://www.c-plusplus.net/forum/post/954088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/954088</guid><dc:creator><![CDATA[voll katt]]></dc:creator><pubDate>Sun, 01 Jan 2006 15:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to compile-time objektauswahl? on Sun, 01 Jan 2006 15:48:20 GMT]]></title><description><![CDATA[<p>mit ein bischen nachdenken bin ich darauf gekommen:</p>
<pre><code class="language-cpp">// #include benötigte mpl-header
using namespace boost::mpl;
struct dummy {}; // um kollisionen mit void* als parameter zu vermeiden
template&lt;long N, typename T0, typename T1, typename T2, typename T3&gt;
typename at_c&lt;
        vector&lt; T0, T1, T2, T3 &gt;,
        n
    &gt;::type
return_nth(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, typename boost::enable_if_c&lt; N != 0, dummy &gt;::type* = 0)
{
    return return_nth&lt; N - 1 &gt;( t1, t2, t3, t0 );
// oder auch return_nth&lt; N - 1 &gt;( t1, t2, t3 ); wenn die entsprechenden overloads existieren
}
template&lt;long N, typename T0, typename T1, typename T2, typename T3&gt;
T0 return_nth(const T0&amp; t0, const T1&amp; t1, const T2&amp; t2, const T3&amp; t3, typename boost::enable_if_c&lt; N == 0, dummy &gt;::type* = 0) 
{
    return t0;
}
</code></pre>
<p>das wären dann jeweils 2 overloads je parameterzahl - das erscheint vertretbar. für das erzeugen der variablen parameteranzahlen ist der präprozessor zuständig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/954111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/954111</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 01 Jan 2006 15:48:20 GMT</pubDate></item></channel></rss>