<?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[typedefs und freie Funktionen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine eigene Tupel-Klasse xsp::tuple, die eine leicht abgewandelte Version von std::tuple ist. Jetzt möchte ich in Templates beide Typen verwenden können.<br />
Für std::tuple existiert ja eine freie Template-Funktion std::get&lt;i&gt;(tuple);<br />
Jetzt wäre es ja ziemlich dämlich den std-Namensraum für das xsp::tuple zu missbrauchen. Stattdessen soll get&lt;i&gt; im Namensraum xsp liegen.</p>
<p>Wie mache ich das am elegantesten? Muss ich wirklich einen wrapper schreiben?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; // T kann xsp::tuple oder std::tuple sein
void doit(T&amp; t){
        typename std::tuple_element&lt;0, T&gt;::type e = std::get&lt;0&gt;(t);
        // typename xsp::tuple_element&lt;0, T&gt;::type e = xsp::get&lt;0&gt;(t);
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
<p>EDIT:<br />
Achso: Das gleiche Problem existiert natürlich auch bei einem typedef, wenn man von std::tuple nach xsp::tuple wechselt oder umgekehrt...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291777/typedefs-und-freie-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 11:59:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291777.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Aug 2011 16:42:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 16:46:48 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine eigene Tupel-Klasse xsp::tuple, die eine leicht abgewandelte Version von std::tuple ist. Jetzt möchte ich in Templates beide Typen verwenden können.<br />
Für std::tuple existiert ja eine freie Template-Funktion std::get&lt;i&gt;(tuple);<br />
Jetzt wäre es ja ziemlich dämlich den std-Namensraum für das xsp::tuple zu missbrauchen. Stattdessen soll get&lt;i&gt; im Namensraum xsp liegen.</p>
<p>Wie mache ich das am elegantesten? Muss ich wirklich einen wrapper schreiben?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; // T kann xsp::tuple oder std::tuple sein
void doit(T&amp; t){
        typename std::tuple_element&lt;0, T&gt;::type e = std::get&lt;0&gt;(t);
        // typename xsp::tuple_element&lt;0, T&gt;::type e = xsp::get&lt;0&gt;(t);
}
</code></pre>
<p>Gruß,<br />
XSpille</p>
<p>EDIT:<br />
Achso: Das gleiche Problem existiert natürlich auch bei einem typedef, wenn man von std::tuple nach xsp::tuple wechselt oder umgekehrt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111134</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 26 Aug 2011 16:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 17:22:33 GMT]]></title><description><![CDATA[<p>EDIT:</p>
<p>Argh, mit expliziten Template-Parametern geht das mit ADL ja nicht so einfach - da stolpert er ja schon darüber, dass er nicht checkt, dass das ein Funktionsaufruf sein soll.</p>
<p>Also muss ein pöser Trick her:</p>
<pre><code class="language-cpp">namespace enable_ADL_for_tuple_get
{
    template &lt;int i, class T&gt;
    int get(T const&amp;, ...); // bitte nirgends implementieren
}

template&lt;typename T&gt; // T kann xsp::tuple oder std::tuple sein, oder jeder typ
void doit(T&amp; t){     // für den über ADL ne passende funktion gefunden wird
    using enable_ADL_for_tuple_get::get;
    auto e = get&lt;0&gt;(t); 
}
</code></pre>
<p>Da nun in &quot;doit&quot; ein &quot;get&quot; Funktions-Template sichtbar ist, wird <code>get&lt;0&gt;(t)</code> als Funktionsaufruf erkannt. Und nachdem <code>get&lt;0&gt;(t)</code> als Funktionsaufruf erkannt wurde, wird dann netterweise auch ADL gemacht. Und dann natürlich Overload Resolution.</p>
<p><code>enable_ADL_for_tuple_get::get</code> steht immer als Kandidat zur Verfügung. Wenn (über ADL oder auch sonst wie) andere Funktionen als Kandidaten zur Verfügung stehen, dann sollte das &quot;...&quot; dafür sorgen, dass <code>enable_ADL_for_tuple_get::get</code> immer als &quot;schlechter passend&quot; eingestuft wird.</p>
<p>Und sollte doch mal <code>enable_ADL_for_tuple_get::get</code> ausgewählt werden, dann ist es nirgends definiert, was zum gewünschten Fehler führt.</p>
<p>----</p>
<p>Falls jmd. eine sauberere Lösung kennt, bitte melden <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111139</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Aug 2011 17:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 17:36:34 GMT]]></title><description><![CDATA[<p>Danke hustbaer!</p>
<p>Ich kuck noch mal wie ich es löse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111152</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 26 Aug 2011 17:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:06:03 GMT]]></title><description><![CDATA[<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111171</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:34:03 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Weil man manchmal den Wald vor lauter Bäumen nicht sieht <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/2111189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111189</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:34:18 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Weil in header-Dateien nach meiner Einstellung/Meinung kein using reingehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111190</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:38:05 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Weil in header-Dateien nach meiner Einstellung/Meinung kein using reingehört.</p>
</blockquote>
<p>Auf die Begründung bin ich sehr gespannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111192</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:38:05 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:38:33 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Weil in header-Dateien nach meiner Einstellung/Meinung kein using reingehört.</p>
</blockquote>
<p>Das ist nur ein Problem, wenn du das using frei im Header steht. Lokal in einer Funktion ist es ungefährlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111193</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 18:49:55 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>XSpille schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Weil in header-Dateien nach meiner Einstellung/Meinung kein using reingehört.</p>
</blockquote>
<p>Auf die Begründung bin ich sehr gespannt.</p>
</blockquote>
<p>Sorry...<br />
Da ich using nie verwende, war es für mich automatisch frei im Header...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111197</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 26 Aug 2011 18:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 19:27:14 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Ich danke dir!!!</p>
<p>Es klappt wirklich gut für std::get und xsp::get...</p>
<p>Allerdings weiß ich noch nicht, wie ich es mit dem<br />
std::tuple_element bzw. xsp::tuple_element<br />
hinkriege, da es ja eine class/struct ist.</p>
<blockquote>
<p>error: 'tuple_element' is already declared in this scope</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2111211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111211</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 26 Aug 2011 19:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 19:48:30 GMT]]></title><description><![CDATA[<p>Nimm <code>decltype(get&lt;0&gt;(t))</code> oder <code>auto</code> .<br />
(Oder wäre hier <code>decltype((get&lt;0&gt;(t)))</code> angesagt <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="😕"
    />)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111219</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Aug 2011 19:48:30 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs und freie Funktionen on Fri, 26 Aug 2011 19:48:36 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">using std::get;
</code></pre>
<p>genauso wie das für std::swap gemacht wird?</p>
</blockquote>
<p>Ich danke dir!!!</p>
<p>Es klappt wirklich gut für std::get und xsp::get...</p>
<p>Allerdings weiß ich noch nicht, wie ich es mit dem<br />
std::tuple_element bzw. xsp::tuple_element<br />
hinkriege, da es ja eine class/struct ist.</p>
<blockquote>
<p>error: 'tuple_element' is already declared in this scope</p>
</blockquote>
</blockquote>
<p>decltype of get anwenden? Oder evtl. ein eigenes tuple_element-Template</p>
<pre><code class="language-cpp">template &lt;std::size_t, typename &gt; struct tuple_element;
template&lt;std::size_t I, typename... T&gt; struct tuple_element&lt;I, std::tuple&lt;T...&gt;&gt; : std::tuple_element&lt;I, std::tuple&lt;T...&gt;&gt; {};
template&lt;std::size_t I, typename... T&gt; struct tuple_element&lt;I, xsp::tuple&lt;T...&gt;&gt; : xsp::tuple_element&lt;I, xsp::tuple&lt;T...&gt;&gt; {};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2111220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111220</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 26 Aug 2011 19:48:36 GMT</pubDate></item></channel></rss>