<?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[decltype in lambdas]]></title><description><![CDATA[<p>Problem:</p>
<p>Nehmen wir mal an, wie haben einen vector&lt;int&gt;.<br />
Mit diesem vector arbeiten wir und zum schluss wollen wir alles ausgeben.<br />
Dies würde ungefähr so aussehen mit for_each und einem lambda:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v;

...

std::for_each(v.begin(),v.end(),[](const int &amp;e){std::cout &lt;&lt; e});
</code></pre>
<p>Allerdings wollen wir nun auch Fließkommazahlen unterstützen.<br />
Also wird der vector mit floats definiert.</p>
<p>Das Problem dabei ist, dass auch bei der lambda Funktion der Typ geändert werden muss. (Dasselbe wäre auch, wenn wir z.B. den Container ändern)</p>
<p>Damit man die Typen bei Lambdas nicht ändern muss, ist decltype eine sehr interessante Methode, den Typ des eingesetzten Containers und den Typ automatisch zu ermitteln.</p>
<p>So wäre es bei der bei dieser Variante möglich, den Container auf z.B. Ein std::array zu wechseln oder statt int ein float oder string zu nehmen.</p>
<pre><code class="language-cpp">std::vector&lt;float&gt; v; //Dies kann z.B. auch ein std::array&lt;int,3&gt; sein

...

std::for_each(v.begin(),v.end(),[](decltype(*v.begin()) &amp;e){std::cout &lt;&lt; e;});
</code></pre>
<p>oder gibt es dazu eine andere elegantere Lösung?</p>
<p>Eine weitere Lösung wäre es auch, den Typ mittels typedef zu definieren.<br />
dies würde aber mehr Verwaltung und mehr Schreibarbeit bedeuten</p>
<p>P.S.: Dies ist nur mal so ein Gedanke, den ich mit VS2010 ausprobiert habe.<br />
Falls dies nicht vom Standard vorgesehen ist, bitte ich, das ihr mich korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271454/decltype-in-lambdas</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 12:58:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271454.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jul 2010 13:44:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to decltype in lambdas on Wed, 28 Jul 2010 14:33:20 GMT]]></title><description><![CDATA[<p>Problem:</p>
<p>Nehmen wir mal an, wie haben einen vector&lt;int&gt;.<br />
Mit diesem vector arbeiten wir und zum schluss wollen wir alles ausgeben.<br />
Dies würde ungefähr so aussehen mit for_each und einem lambda:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v;

...

std::for_each(v.begin(),v.end(),[](const int &amp;e){std::cout &lt;&lt; e});
</code></pre>
<p>Allerdings wollen wir nun auch Fließkommazahlen unterstützen.<br />
Also wird der vector mit floats definiert.</p>
<p>Das Problem dabei ist, dass auch bei der lambda Funktion der Typ geändert werden muss. (Dasselbe wäre auch, wenn wir z.B. den Container ändern)</p>
<p>Damit man die Typen bei Lambdas nicht ändern muss, ist decltype eine sehr interessante Methode, den Typ des eingesetzten Containers und den Typ automatisch zu ermitteln.</p>
<p>So wäre es bei der bei dieser Variante möglich, den Container auf z.B. Ein std::array zu wechseln oder statt int ein float oder string zu nehmen.</p>
<pre><code class="language-cpp">std::vector&lt;float&gt; v; //Dies kann z.B. auch ein std::array&lt;int,3&gt; sein

...

std::for_each(v.begin(),v.end(),[](decltype(*v.begin()) &amp;e){std::cout &lt;&lt; e;});
</code></pre>
<p>oder gibt es dazu eine andere elegantere Lösung?</p>
<p>Eine weitere Lösung wäre es auch, den Typ mittels typedef zu definieren.<br />
dies würde aber mehr Verwaltung und mehr Schreibarbeit bedeuten</p>
<p>P.S.: Dies ist nur mal so ein Gedanke, den ich mit VS2010 ausprobiert habe.<br />
Falls dies nicht vom Standard vorgesehen ist, bitte ich, das ihr mich korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933139</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Wed, 28 Jul 2010 14:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to decltype in lambdas on Wed, 28 Jul 2010 16:05:52 GMT]]></title><description><![CDATA[<p>Man kann natürlich auch einfach typedef benutzen, um einen Alias einzuführen. Dann muss man auch nur eine einzige Stelle ändern (die typedef-Zeile), wenn der Typ geändert werden soll.</p>
<pre><code class="language-cpp">typedef float elementtyp;
...
vector&lt;elementtyp&gt; vec;
...
for_each(vec.begin(),vec.end(),[](elementtyp x) {...});
</code></pre>
<p>Und sonst, ja, decltype kann sehr sehr praktisch. <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/1933211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933211</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 28 Jul 2010 16:05:52 GMT</pubDate></item></channel></rss>