<?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[Perfect Forwarding ohne &amp;quot;Templates&amp;quot;]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende Situation.</p>
<pre><code>class Foo : public std::vector&lt;LargeClass&gt; {
public:
    Foo(std::vector&lt;LargeClass&gt;/*universal reference*/ vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::forward(vec)) 
    {
        doSomeWithFlag(flag);        
    }
}
</code></pre>
<p>Im Konstruktor bräuchte ich für das perfect forwarding eine universal-reference für den vector. Dafür müsste ich jedoch einen Template Parameter einführen. Gibt es eine Möglichkeit dies zu umgehen? Ich weiß, dass es nur ein std::vector sein kann. Ich würde ungern einen Template Parameter einführen und diesen dann Spezialisieren. Die Alternative wäre natürlich einfach zwei Konstrukoren anzubieten, aber vielleicht lässt es sich ja anders lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333458/perfect-forwarding-ohne-quot-templates-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 23:52:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333458.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Jul 2015 09:13:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:13:06 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende Situation.</p>
<pre><code>class Foo : public std::vector&lt;LargeClass&gt; {
public:
    Foo(std::vector&lt;LargeClass&gt;/*universal reference*/ vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::forward(vec)) 
    {
        doSomeWithFlag(flag);        
    }
}
</code></pre>
<p>Im Konstruktor bräuchte ich für das perfect forwarding eine universal-reference für den vector. Dafür müsste ich jedoch einen Template Parameter einführen. Gibt es eine Möglichkeit dies zu umgehen? Ich weiß, dass es nur ein std::vector sein kann. Ich würde ungern einen Template Parameter einführen und diesen dann Spezialisieren. Die Alternative wäre natürlich einfach zwei Konstrukoren anzubieten, aber vielleicht lässt es sich ja anders lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459048</guid><dc:creator><![CDATA[adasdasdasd]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:25:08 GMT]]></title><description><![CDATA[<p>Es lässt sich (so-gut-wie) immer alles anders lösen.<br />
Die Frage ist aber: wieso willst du es anders lösen? Was für eine Verbesserung erwartest du dir dadurch?<br />
Einfacher wird es dadurch nämlich sicher nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459054</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:29:36 GMT]]></title><description><![CDATA[<p>Wenn du lediglich Kopien vermeiden möchtest, geht</p>
<pre><code>Foo(std::vector&lt;LargeClass&gt; vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::move(vec)) 
    { 
        doSomeWithFlag(flag);         
    }
</code></pre>
<p>Per Template sähe es so aus</p>
<pre><code>template &lt;typename T, std::enable_if_t&lt;std::is_same&lt;std::decay_t&lt;T&gt;, std::vector&lt;LargeClass&gt;&gt;{}, int&gt; = 0&gt;
    Foo(T&amp;&amp; vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::forward&lt;T&gt;(vec)) 
    { 
        doSomeWithFlag(flag);         
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2459056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459056</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:32:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Es lässt sich (so-gut-wie) immer alles anders lösen.<br />
Die Frage ist aber: wieso willst du es anders lösen? Was für eine Verbesserung erwartest du dir dadurch?</p>
</blockquote>
<p>Danke für die schnelle Antwort. Ich hatte mir erhofft, dass ich etwas simples übersehen habe und es mehr oder weniger wie in meinem Pseudocode aussehen würde.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Einfacher wird es dadurch nämlich sicher nicht.</p>
</blockquote>
<p><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="👍"
    /> Damit ist alles gesagt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459058</guid><dc:creator><![CDATA[adasdasdasd]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:35:36 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Wenn du lediglich Kopien vermeiden möchtest, geht</p>
<pre><code>Foo(std::vector&lt;LargeClass&gt; vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::move(vec)) 
    { 
        doSomeWithFlag(flag);         
    }
</code></pre>
</blockquote>
<p>Perfekt, genau soetwas habe ich gemeint! <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/2459060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459060</guid><dc:creator><![CDATA[adasdasdasd]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:43:19 GMT]]></title><description><![CDATA[<p>Im übrigen ist es nicht so gut von std::vector zu erben weil diese Klasse keinen virtual Destructor hat. Kannst du den vector nicht als Membervariable speichern oder wieso willst du davon erben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459063</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Wed, 08 Jul 2015 09:56:46 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Wenn du lediglich Kopien vermeiden möchtest, geht</p>
<pre><code>Foo(std::vector&lt;LargeClass&gt; vec, bool flag) 
        : std::vector&lt;LargeClass&gt;(std::move(vec)) 
    { 
        doSomeWithFlag(flag);         
    }
</code></pre>
</blockquote>
<p>*facepalm* (@self)<br />
Gut, das ist jetzt zwar kein perfect forwarding, aber es ist definitiv einfacher, und genau das was der OP will.<br />
Manchmal kann man schon sehr auf dem Schlauf stehe - bzw. Fragen zu wörtlich nehmen und dann ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459066</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 08 Jul 2015 09:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Thu, 09 Jul 2015 08:01:43 GMT]]></title><description><![CDATA[<p>adasdasdasd schrieb:</p>
<blockquote>
<p>eine universal-reference</p>
</blockquote>
<p>OT zur Info:<br />
Das Ding heisst jetzt 'forward reference'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459154</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 09 Jul 2015 08:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Thu, 09 Jul 2015 08:09:58 GMT]]></title><description><![CDATA[<p>Forward<strong>ing</strong> reference.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459155</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 09 Jul 2015 08:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Perfect Forwarding ohne &amp;quot;Templates&amp;quot; on Thu, 09 Jul 2015 08:18:56 GMT]]></title><description><![CDATA[<p>Ach ja, das ist das schöne an Foren: Man will jemanden helfen und lernt dann selber wieder was.<br />
Danke für die Verbesserung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2459157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2459157</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 09 Jul 2015 08:18:56 GMT</pubDate></item></channel></rss>