<?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[std::size (analog zu begin&#x2F;end)]]></title><description><![CDATA[<p>Wie wäre es mit <code>std::size</code> ?</p>
<p>Das wäre doch mal was. Auch eine allgemeinere Form von <code>.size()</code> für Container oder <code>sizeof</code> für Arrays.</p>
<p>Sollte doch eigentlich auch dabei sein. (Oder ich übersehe gerade etwas*; die Idee ist mir vor etwa einer halben Minute in den Kopf gekommen)</p>
<p>~* Ja, ich glaube das braucht einfach kein Schwein...~</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319685/std-size-analog-zu-begin-end</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 20:59:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319685.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Aug 2013 19:50:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 19:55:38 GMT]]></title><description><![CDATA[<p>Wie wäre es mit <code>std::size</code> ?</p>
<p>Das wäre doch mal was. Auch eine allgemeinere Form von <code>.size()</code> für Container oder <code>sizeof</code> für Arrays.</p>
<p>Sollte doch eigentlich auch dabei sein. (Oder ich übersehe gerade etwas*; die Idee ist mir vor etwa einer halben Minute in den Kopf gekommen)</p>
<p>~* Ja, ich glaube das braucht einfach kein Schwein...~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349095</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 28 Aug 2013 19:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:02:35 GMT]]></title><description><![CDATA[<p>Bist nicht der einzige, der das braucht, ein size für Arrays hat wohl jeder C++-Programmierer schon seit jeher in seinem Code.</p>
<p>Nur für generischen Code bringt es halt nichts, denn was will man damit schon anstellen? Fehlt noch ein nonmember-at(), dann hätten wir eine schlechte Kopie von RAIters.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349096</guid><dc:creator><![CDATA[schwein]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:09:53 GMT]]></title><description><![CDATA[<p>Die übliche Schreibweise ist eben mit begin/end, was die gleiche Funktion erfüllt. Oder was würdest du sonst mit der size so machen, was häufig vorkäme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349097</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:12:11 GMT]]></title><description><![CDATA[<p>Ehrlich gesagt find ich auch std::begin()/end() unnötig.<br />
Das Argument war, die begin/end von built-in Arrays zu erhalten.<br />
Und im gleichen Standard kam dann std::array... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Edit: OK, man könnte inkompatible Container kompatibel machen, aber ich kenne keine Library mit Containern, die nicht eh schon mit der STL kompatibel ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349098</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:28:40 GMT]]></title><description><![CDATA[<p>std::begin/end wurde eingeführt, im den range-for-loop zu ermöglichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349100</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:41:38 GMT]]></title><description><![CDATA[<p>schwein schrieb:</p>
<blockquote>
<p>ein size für Arrays hat wohl jeder C++-Programmierer schon seit jeher in seinem Code</p>
</blockquote>
<p>Nein. Erst recht nicht, seit ich keine Arrays mehr benutze.</p>
<p>Ich kann mir gerade keine Situation vorstellen, wo ein globales <code>size()</code> wirklich Vorteile brächte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349106</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 20:54:39 GMT]]></title><description><![CDATA[<p>Ich sehe schon, das wäre völliger Blödsinn.</p>
<p>Aber wenn wir schon dabei sind, ich habe noch mehr verrückte Ideen: Ich wünsche mir ein Sprachfeature, dass einem Ausdruck erlaubt, in mehrere (durch Kommas getrennte) Ausdrücke zu zerfallen. Beispiel:</p>
<pre><code>class vector
{
    operator list_proxy&lt;iterator, iterator&gt;() { return {begin(), end()}; }
};
</code></pre>
<p><code>list_proxy</code> selbst zerfällt dann (durch Compiler-Hokuspokus) in eine syntaktische Liste aller Bestandteile.</p>
<pre><code>std::copy( vec, iter );
// =&gt;
std::copy( std::get&lt;0&gt;(list_proxy&lt;iterator, iterator&gt;::tuple()), std::get&lt;1&gt;(list_proxy&lt;iterator, iterator&gt;::tuple()), iter );
</code></pre>
<p>Alter Code muss nicht verändert werden; Overload-Resolution lässt alle anderen Fälle besser aussehen.</p>
<p>Nicht böse sein, bin <a href="http://xkcd.com/323/" rel="nofollow">angetrunken</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349111</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 28 Aug 2013 20:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 21:40:03 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>std::begin/end wurde eingeführt, im den range-for-loop zu ermöglichen.</p>
</blockquote>
<p>Aber warum sagen dann manche, man solle bei den Funktionen die globalen statt der Methoden verwenden, also</p>
<pre><code>std::sort(std::begin(container), std::end(container));
</code></pre>
<p>anstatt</p>
<pre><code>std::sort(container.begin(), container.end());
</code></pre>
<p>und begründen, dass man damit auch zu built-in Arrays konsistent wäre, man gleichzeitig aber keine Builtin-Arrays sondern std::array verwenden soll.</p>
<p>Sone schrieb:</p>
<blockquote>
<p>Ich wünsche mir ein Sprachfeature, dass einem Ausdruck erlaubt, in mehrere (durch Kommas getrennte) Ausdrücke zu zerfallen. Beispiel:</p>
<pre><code>class vector
{
    operator list_proxy&lt;iterator, iterator&gt;() { return {begin(), end()}; }
};
</code></pre>
<p><code>list_proxy</code> selbst zerfällt dann (durch Compiler-Hokuspokus) in eine syntaktische Liste aller Bestandteile.</p>
<pre><code>std::copy( vec, iter );
// =&gt;
std::copy( std::get&lt;0&gt;(list_proxy&lt;iterator, iterator&gt;::tuple()), std::get&lt;1&gt;(list_proxy&lt;iterator, iterator&gt;::tuple()), iter );
</code></pre>
</blockquote>
<p>Hier würde ich mir eine Art range-class wünschen, also sowas wie</p>
<pre><code>std::sort(container.range());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2349117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349117</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Wed, 28 Aug 2013 21:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 21:45:17 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>man gleichzeitig aber keine Builtin-Arrays sondern std::array verwenden soll.</p>
</blockquote>
<p>Man soll nicht einfach std::array nehmen.</p>
<p>Normale Arrays haben alle Vorzüge von std::array, dafür aber noch eine nettere Syntax und sie kopieren sich nicht einfach so (weil das teuer ist und besser vermieden wird).</p>
<p>Wer Kopien explizit will, und nur dann, soll std::array verwenden. std::expensive_copyable_array wäre ein besserer Name gewesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349119</guid><dc:creator><![CDATA[anti-stdarray-fraktion]]></dc:creator><pubDate>Wed, 28 Aug 2013 21:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 22:03:24 GMT]]></title><description><![CDATA[<p>anti-stdarray-fraktion schrieb:</p>
<blockquote>
<p>Normale Arrays haben alle Vorzüge von std::array, dafür aber noch eine nettere Syntax und sie kopieren sich nicht einfach so (weil das teuer ist und besser vermieden wird).</p>
</blockquote>
<p>Ich behaupte das Gegenteil:<br />
std::array ist schöner, weil man ein standard-container-interface hat, man mit einem einfachen und übersichtlichen Operator kopieren oder Vergleichen kann, man zusätzlich noch praktische Funktionen (fill, swap, reverse-iteratoren, bound checks) hat und gleichzeitig alle Vorteile von Builtin-arrays, außer mehrdimensionalen arrays und automatischem herausfinden der Größe hat, dieses aber sehr einfach nachrüsten könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349121</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Wed, 28 Aug 2013 22:03:24 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Wed, 28 Aug 2013 22:07:50 GMT]]></title><description><![CDATA[<p>anti-stdarray-fraktion schrieb:</p>
<blockquote>
<p>Normale Arrays haben alle Vorzüge von std::array</p>
</blockquote>
<p>Ähm, nein. Du hast mit rohen Arrays keine Wertsemantik, keine Möglichkeit zur Übergabe und Rückgabe von Funktionen, kein STL-Interface, keine Debug-Checks und weniger Typsicherheit durch array-to-pointer decay.</p>
<p>Die Syntax ist nur gerade bei der Deklaration netter. Sobald du kopieren musst, kannst du ziemlich viel Boilerplate-Code schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349122</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 28 Aug 2013 22:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 06:51:16 GMT]]></title><description><![CDATA[<p>std::size und ähnliches wäre sinnvoll, wenn es range Adaptoren a la boost::range gäbe. Da kann man das gut gebrauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349133</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 29 Aug 2013 06:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 09:24:55 GMT]]></title><description><![CDATA[<p>Könnte man nicht ein generisches <code>std::size()</code> über</p>
<pre><code>template &lt;typename T&gt;
size_t size(const T&amp; container)
{
    return distance(begin(container), end(container));
}
</code></pre>
<p>implementieren (evtl. auch für die Fanatiker mit generischem Rückgabetyp)? Ist dann je nach Kategorie halt langsam; bei Typen wie <code>std::list</code> könnte man als Optimierung Überladungen anbieten. Bei <code>std::forward_list</code> wirds schon schwieriger...</p>
<p>Aber wie oft braucht ihr denn <code>size()</code> , gerade bei Containern ohne Random-Access-Iteratoren? Bei Ranges habe ich das Gefühl, ein <code>empty()</code> ist viel wichtiger...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349157</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Aug 2013 09:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 11:47:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das ist doch Blödsinn. Man macht das per SFINAE, wie auch sonst; alle Typen, die eine Funktion <code>size()</code> haben, bei denen wird das auch aufgerufen.</p>
<p>Für alle Typen, die eine Funktion begin/end aber keine Funktion size() haben, kommt deine Variante ins Spiel. Und sonst geht es um Überladungen.</p>
<blockquote>
<p>Aber wie oft braucht ihr denn size(), gerade bei Containern ohne Random-Access-Iteratoren? Bei Ranges habe ich das Gefühl, ein empty() ist viel wichtiger...</p>
</blockquote>
<p>Mir ging es darum, einige Operationen die nicht von der Gesamtfunktionalität der Klasse abhängen zu entkoppeln und generisch zu machen. Das gilt sowohl für empty(), size() oder auch Typedefs wie value_type (wobei bei letzterem wohl keine schöne direkte Schreibweise wie ein Funktionsaufruf möglich ist*).</p>
<p>* Am ehesten etwas wie <code>decltype(elem_t(vec))</code> , wobei aber schon das recht hässlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349159</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 29 Aug 2013 11:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 12:47:05 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das ist doch Blödsinn. Man macht das per SFINAE</p>
</blockquote>
<p>Meinst du nicht ADL?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349188</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 29 Aug 2013 12:47:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 20:04:08 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das ist doch Blödsinn. Man macht das per SFINAE</p>
</blockquote>
<p>Meinst du nicht ADL?</p>
</blockquote>
<p>ADL und SFINAE <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/2349286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349286</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 29 Aug 2013 20:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 29 Aug 2013 20:54:51 GMT]]></title><description><![CDATA[<p>Python hat auch len() als freie, builtin Funktion. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349301</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 29 Aug 2013 20:54:51 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Sat, 31 Aug 2013 01:33:54 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das ist doch Blödsinn. Man macht das per SFINAE</p>
</blockquote>
<p>Meinst du nicht ADL?</p>
</blockquote>
<p>ADL und SFINAE <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>
</blockquote>
<p>Der &quot;member function detection&quot; Trick gehört mit zum kranksten was C++ zu bieten hat. Sowas mag dir gefallen, aber in Production-Code hat das mMn. nix verloren. Also nein, sowas macht &quot;man&quot; nicht so.</p>
<p>Und es spricht mMn. auch nichts gegen Overloads + ADL für die paar Klassen die ein spezielles size brauchen.<br />
Speziell nicht wenn man als Default-Implementierung nicht das u.U. langsame <code>return distance(begin(x), end(x))</code> macht, sondern einfach <code>return x.size()</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349487</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 31 Aug 2013 01:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 05 Sep 2013 12:24:42 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Der &quot;member function detection&quot; Trick gehört mit zum kranksten was C++ zu bieten hat. Sowas mag dir gefallen, aber in Production-Code hat das mMn. nix verloren. Also nein, sowas macht &quot;man&quot; nicht so.</p>
</blockquote>
<p>Ich weiß jetzt nicht, was für einen Trick du meinst, aber sowas hier</p>
<pre><code class="language-cpp">template&lt;class T&gt;
auto size(T&amp;&amp; o) -&gt; decltype(o.size())
{ return o.size(); }
</code></pre>
<p>wird dank SFINAE einfach bei Typen T, die kein .size() anbieten, ignoriert, weil da der Rückgabetyp nicht deduziert werden kann. Man muss, wenn man mehrere Overloads anbieten will, die Auflösung nur etwas steuern, sonst gibt's Mehrdeutigkeiten. Also, wenn wir das hier als Überladung hinzufügen</p>
<pre><code class="language-cpp">template&lt;class T&gt;
auto size(T&amp;&amp; o) -&gt; decltype(std::distance(o.begin(),o.end()))
{ return std::distance(o.begin(),o.end()); }
</code></pre>
<p>dann hätten wir für T=vector&lt;int&gt; eine Mehrdeutigkeit. Kein Template ist besser als das andere. Da hilft aber Tag-Dispatching mit Partial Ordering:</p>
<pre><code class="language-cpp">namespace size_impl {

  using std::begin;
  using std::end;
  using std::distance;

  struct fallback {};
  struct preferred : fallback {};

  template&lt;class T&gt;
  auto size(T&amp;&amp; o, preferred)
  -&gt; decltype(o.size())
  { return o.size(); }

  template&lt;class T&gt;
  auto size(T&amp;&amp; o, fallback)
  -&gt; decltype(distance(begin(o),end(o)))
  { return distance(begin(o),end(o)); }

} // namespace size_impl

template&lt;class T&gt;
auto size(T&amp;&amp; o)
-&gt; decltype(size(o,size_impl::preferred()))
{ return size(o,size_impl::preferred()); }
</code></pre>
<p>(ungetestet)</p>
<p>Da wünscht man sich eigentlich nur noch, dass man das &quot;-&gt; decltype(...)&quot; nicht mehr schreiben muss. <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/2349514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349514</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 05 Sep 2013 12:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Sat, 31 Aug 2013 12:26:18 GMT]]></title><description><![CDATA[<blockquote>
<p>Da wünscht man sich eigentlich nur noch, dass man das &quot;-&gt; decltype(...)&quot; nicht mehr schreiben muss. <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>
</blockquote>
<p>Genau dafür hast du doch eigens ein Makro definiert ( <code>AUTO_RETURN</code> ).</p>
<p>Sollte nicht übrigens der Parameter der beiden Hilfsfunktionen eine <code>const</code> -Referenz sein?</p>
<blockquote>
<p>Der &quot;member function detection&quot; Trick gehört mit zum kranksten was C++ zu bieten hat.</p>
</blockquote>
<p>Finde ich nicht.</p>
<blockquote>
<p>Sowas mag dir gefallen, aber in Production-Code hat das mMn. nix verloren.</p>
</blockquote>
<p>Pardon? <strong>Production Code</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349534</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 31 Aug 2013 12:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Sun, 01 Sep 2013 00:11:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a><br />
Ich wusste nicht dass das mit C++11 einfacher geht. Gut zu wissen, danke! <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>
<p>In C++03 ist es ... naja, seht selbst:<br />
<a href="http://www.martinecker.com/wiki/index.php?title=Detecting_the_Existence_of_Member_Functions_at_Compile-Time" rel="nofollow">http://www.martinecker.com/wiki/index.php?title=Detecting_the_Existence_of_Member_Functions_at_Compile-Time</a></p>
<p>Trotzdem finde ich es etwas fragwürdig. Die C++03 Variante mit &quot;more spezialized&quot; Overloads die über ADL gefunden werden mag mehr Tipparbeit sein, da man für jede speziell zu behandelnde Klasse nen eigenen Overload braucht. Aber genau das ist auch irgendwo die Stärke dieser Variante: man weiss was man bekommt. Und muss nicht mit diversen Tricks rummachen, wenn die generische &quot;one for all&quot; Variante mal nicht das macht was man möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349583</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 01 Sep 2013 00:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Sun, 01 Sep 2013 00:10:41 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>Sowas mag dir gefallen, aber in Production-Code hat das mMn. nix verloren.</p>
</blockquote>
<p>Pardon? <strong>Production Code</strong>?</p>
</blockquote>
<p>Ja.</p>
<p>Code der &quot;produktiv&quot; genutzt wird, aka. &quot;production code&quot;.</p>
<p>Im Gegensatz zu Code der nicht &quot;produktiv&quot; genutzt wird, wie Code von Proof-of-Concept Implementierungen, Prototypen, irgendwelche kleinen Test-Tools, Zeugs was Leute privat zum Spass programmieren etc.</p>
<p>Wobei mit der Definition auch Ad-Hoc Lösungen, Build-Skripts etc. eingeschlossen wären - die sind aber normalerweise nicht gemeint wenn man &quot;production code&quot; sagt/schreibt.</p>
<p>Bzw. auch einfach: <a href="http://www.google.com/search?q=%22production+code%22+programming" rel="nofollow">http://www.google.com/search?q=&quot;production+code&quot;+programming</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349584</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 01 Sep 2013 00:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::size (analog zu begin&#x2F;end) on Thu, 05 Sep 2013 11:09:51 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>Aber warum sagen dann manche, man solle bei den Funktionen die globalen statt der Methoden verwenden, also</p>
<pre><code>std::sort(std::begin(container), std::end(container));
</code></pre>
<p>anstatt</p>
<pre><code>std::sort(container.begin(), container.end());
</code></pre>
<p>und begründen, dass man damit auch zu built-in Arrays konsistent wäre, man gleichzeitig aber keine Builtin-Arrays sondern std::array verwenden soll.</p>
</blockquote>
<p>Wie von Nathan schon leicht angedeutet:</p>
<p>Nathan schrieb:</p>
<blockquote>
<p>Edit: OK, man könnte inkompatible Container kompatibel machen, aber ich kenne keine Library mit Containern, die nicht eh schon mit der STL kompatibel ist.</p>
</blockquote>
<p>Wenn du einen nicht STL kompatible Containern hast, aber jede Menge Funktionalität, die darauf angewiesen ist, dann stellst du einfach Überladung für begin() und end() zur Verfügung. Diese rufen dann von deinem Container die &quot;begin&quot; und &quot;end&quot; Funktion auf. Dann kannst du auch das hübsche range-based-for benutzen:</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

struct Container
{
	int a[2];
	Container() : a{1,2} {}
};

int* begin(Container &amp;cont)
{
	return cont.a;
}

int* end(Container &amp;cont)
{
	return cont.a+sizeof(cont.a)/sizeof(cont.a[0]);
}

int main() 
{	
	Container conti;

	for(auto aa : conti)
		cout &lt;&lt; aa &lt;&lt; &quot; &quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2350468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350468</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 05 Sep 2013 11:09:51 GMT</pubDate></item></channel></rss>