<?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[Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11)]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mir ist gerade eine Idee gekommen:<br />
Mithilfe von variadic template könnte man analog zu make_shared dem std::vector eine methode hinzufügen, der man konstrutorargumente übergibt und die dann ein neues objekt direkt im vector konstruiert.<br />
Gibt es sowas vielleicht sogar mit dem neuen Standard?<br />
Was haltet ihr davon?</p>
<p>Nochmal als Beispiel:</p>
<pre><code class="language-cpp">struct Point
{
  int x, y;
  Point(int x, int y)
  {
     this-&gt;x = x;
     this-&gt;y = y;
  }
};

void some_func()
{
   vector&lt;Point&gt; vec;
   //früher:
   vec.push_back(Point(5,3));
   //mit variadic templates
   vec.construct_inplace_and_push_back(5,3); //natürlich sollte man sich einen besseren namen dafür ausdenken :-)
}
</code></pre>
<p>Dadurch kann man kopien vermeiden.<br />
Bei Point bringts vll nicht soviel und es gibt ja jetzt auch move-semantik, aber ich fänds schon gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292906/objekte-direkt-in-vector-konstruieren-variadic-templates-c-11</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292906.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Sep 2011 11:59:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 11:59:31 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mir ist gerade eine Idee gekommen:<br />
Mithilfe von variadic template könnte man analog zu make_shared dem std::vector eine methode hinzufügen, der man konstrutorargumente übergibt und die dann ein neues objekt direkt im vector konstruiert.<br />
Gibt es sowas vielleicht sogar mit dem neuen Standard?<br />
Was haltet ihr davon?</p>
<p>Nochmal als Beispiel:</p>
<pre><code class="language-cpp">struct Point
{
  int x, y;
  Point(int x, int y)
  {
     this-&gt;x = x;
     this-&gt;y = y;
  }
};

void some_func()
{
   vector&lt;Point&gt; vec;
   //früher:
   vec.push_back(Point(5,3));
   //mit variadic templates
   vec.construct_inplace_and_push_back(5,3); //natürlich sollte man sich einen besseren namen dafür ausdenken :-)
}
</code></pre>
<p>Dadurch kann man kopien vermeiden.<br />
Bei Point bringts vll nicht soviel und es gibt ja jetzt auch move-semantik, aber ich fänds schon gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121620</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Tue, 20 Sep 2011 11:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:05:27 GMT]]></title><description><![CDATA[<p>Q schrieb:</p>
<blockquote>
<p>Gibt es sowas vielleicht sogar mit dem neuen Standard?</p>
</blockquote>
<p>Wäre das im neuen Standard (wegen Move-Semantik) überhaupt sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121622</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:09:33 GMT]]></title><description><![CDATA[<p>Ist es dem Compiler im Rahmen von Copy Elision nicht sowieso (auch schon im alten Standard) erlaubt, die Kopie da wegzuoptimieren, selbst wenn der Copy-Ctor Seiteneffekte hätte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121623</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:08:46 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Q schrieb:</p>
<blockquote>
<p>Gibt es sowas vielleicht sogar mit dem neuen Standard?</p>
</blockquote>
<p>Wäre das im neuen Standard (wegen Move-Semantik) überhaupt sinnvoll?</p>
</blockquote>
<p>Klar ...</p>
<blockquote>
<p>struct OmgHuge<br />
{<br />
int huge[1000];<br />
};</p>
<p>std::vector&lt;OmgHuge&gt; huge;<br />
huge.push_back( { { 0, 1, 2, 3, /* ... */ } } );</p>
</blockquote>
<p>Da müssten ja rein technisch 1000 ints vom temporären Objekt in den Storage kopiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121624</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:30:40 GMT]]></title><description><![CDATA[<p>Ja, so etwas gibt es und ich finde es auch super praktisch. Diese Funktionen haben den Präfix &quot;emplace&quot; im Namen (z.B. emplace_back oder emplace_front, etc).</p>
<p>Man könnte es z.B. intern für eine Datenstruktor als new-Ersatz verwenden:</p>
<pre><code class="language-cpp">class node {
  :::
};

class graph : boost::noncopyable {
  list&lt;node&gt; nodes_;
  :::
public:
  :::
  template&lt;class...Args&gt;
  node* new_node(Args&amp;&amp;...args)
  {
    nodes_.emplace_back(std::forward&lt;Args&gt;(args)...);
    return &amp;nodes_.back();
  }
  :::
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2121634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121634</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:24:53 GMT]]></title><description><![CDATA[<p>nette sache.<br />
Gibts denn compiler, die sowas schon können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121637</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 12:33:39 GMT]]></title><description><![CDATA[<p>Q schrieb:</p>
<blockquote>
<p>nette sache.<br />
Gibts denn compiler, die sowas schon können?</p>
</blockquote>
<p>Der GCC kann zumindest schonmal variadische Templates verarbeiten. Damit müssten die emplace-Funktionen eigentlich relativ leicht implementierbar werden. Ob libstdc++ das schon kann, weiß ich nicht mit Sicherheit. Es würde mich nicht überaschen, wenn das da schon funktionierte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121640</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte direkt in vector konstruieren (variadic templates&#x2F;C++11) on Tue, 20 Sep 2011 16:26:59 GMT]]></title><description><![CDATA[<p>Habs gerade mal mit visual studio 11 developer preview gestet.<br />
Es funktioniert, allerdings sind die variadic templates vorerst über macros gelöst, aber bisher hab ich keine besonderen negativen effekte dadurch bemerkt (außer, dass ich wohl selbst keine benutzten kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121751</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Tue, 20 Sep 2011 16:26:59 GMT</pubDate></item></channel></rss>