<?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[2D Array an Methode übergeben?!]]></title><description><![CDATA[<p>Hallo, ich suche nach einer Möglichkeit<br />
ein 2D Array an meine Methode zu übergeben. Ich bin überrascht das es so nicht geht <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>
<pre><code>void setMatrix(float **m) 
{
    for(int zeile=0; zeile&lt;nSize; zeile++) {
        for( int spalte=0; spalte&lt;nSize+1; spalte++) {
             data[zeile][spalte] = m[zeile][spalte];
        }
    }
}
</code></pre>
<pre><code>float test[][3] = { {1, 2, 3}, {4, 5, 6}};

PMat matrix1(2);
matrix1.setMatrix(test);
</code></pre>
<p>Kann mir bitte jemand weiter helfen. <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327217/2d-array-an-methode-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 13:10:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327217.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jul 2014 10:56:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 10:56:15 GMT]]></title><description><![CDATA[<p>Hallo, ich suche nach einer Möglichkeit<br />
ein 2D Array an meine Methode zu übergeben. Ich bin überrascht das es so nicht geht <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>
<pre><code>void setMatrix(float **m) 
{
    for(int zeile=0; zeile&lt;nSize; zeile++) {
        for( int spalte=0; spalte&lt;nSize+1; spalte++) {
             data[zeile][spalte] = m[zeile][spalte];
        }
    }
}
</code></pre>
<pre><code>float test[][3] = { {1, 2, 3}, {4, 5, 6}};

PMat matrix1(2);
matrix1.setMatrix(test);
</code></pre>
<p>Kann mir bitte jemand weiter helfen. <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411010</guid><dc:creator><![CDATA[DKlay]]></dc:creator><pubDate>Tue, 29 Jul 2014 10:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:07:09 GMT]]></title><description><![CDATA[<p>DKlay schrieb:</p>
<blockquote>
<p>Ich bin überrascht das es so nicht geht <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>
</blockquote>
<p>Was passiert denn? Fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411013</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:09:12 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Was passiert denn? Fehlermeldung?</p>
</blockquote>
<pre><code>error: no matching function for call to 'PMat::setMatrix(float [2][3])'
     matrix1.setMatrix(test);
</code></pre>
<p>Eine feste größe kann ich jedoch auch nicht in der Funktion definieren, da ich<br />
die Klasse für das lösen einer LGS verwenden möchte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411015</guid><dc:creator><![CDATA[DKlay]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:09:31 GMT]]></title><description><![CDATA[<p>float[][3] und float** sind nicht ineinander umwandelbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411016</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:14:51 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>float[][3] und float** sind nicht ineinander umwandelbar.</p>
</blockquote>
<p>Wie sieht dann eine Lösung für das Problem aus? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2411018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411018</guid><dc:creator><![CDATA[DKlay]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:18:34 GMT]]></title><description><![CDATA[<p>DKlay schrieb:</p>
<blockquote>
<p>Eine feste größe kann ich jedoch auch nicht in der Funktion definieren, da ich<br />
die Klasse für das lösen einer LGS verwenden möchte</p>
</blockquote>
<p>Dann würde ich die Matrix in ein eindimensionales Array stopfen.<br />
(Am besten noch ne Wrapper-Klasse drum, die sich dann doch zweidimenional anfühlt mit [][], aber das ist nicht dringend.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411019</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:46:35 GMT]]></title><description><![CDATA[<pre><code>float test[][3] = {{1, 2, 3}, {4, 5, 6}};

void setMatrix(float* m)
{
	for(int zeile=0; zeile &lt; 2; zeile++) {
		for( int spalte=0; spalte &lt; 2 + 1; spalte++) {
			data[3 * zeile + spalte] = m[3 * zeile + spalte];
		}
	}
}

setMatrix(reinterpret_cast&lt;float*&gt;(test));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411026</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:38:24 GMT]]></title><description><![CDATA[<p>Wie waere es mit &amp;test[0][0]?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411030</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:41:03 GMT]]></title><description><![CDATA[<p>@Mr.Long: Du meinst wohl eher</p>
<pre><code class="language-cpp">data[3 * zeile + spalte] = m[3 * zeile + spalte];
</code></pre>
<p>? (beachte die 3 Änderungen!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411033</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:41:03 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 11:49:01 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Wie waere es mit &amp;test[0][0]?</p>
</blockquote>
<p>Nein funktioniert leider auch nicht.</p>
<pre><code>main.cpp:19:33: error: invalid types 'float[int]' for array subscript
     matrix1.setMatrix(&amp;test[0][0]);
</code></pre>
<p>Hab mich jetzt für die Möglichkeit von Mr Long entschieden mit der<br />
Änderung von Th69.</p>
<p>Danke an dieser Stelle <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="👍"
    /> <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="👍"
    /></p>
<p>Hab aber noch eine Frage. Ist es nicht so das casts auf ein<br />
Design Fehler hindeuten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411036</guid><dc:creator><![CDATA[DKlay]]></dc:creator><pubDate>Tue, 29 Jul 2014 11:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 12:11:46 GMT]]></title><description><![CDATA[<p>Man hat bewusst Namen wie static_cast, reinterpret_cast usw. ausgewählt, da sie hässlich aussehen sollen. Ich würde dabei nicht von einem Designfehler sprechen, sondern mehr von einem schlechten Stil, aber in manchen Fällen kann man eben nicht auf Casts verzichten.<br />
Nur alte C-Casts solltest du nicht verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411043</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Tue, 29 Jul 2014 12:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 12:58:19 GMT]]></title><description><![CDATA[<blockquote>
<p>Ist es nicht so das casts auf ein Design Fehler hindeuten?</p>
</blockquote>
<p><code>dynamic_cast</code> deutet meistens auf einen Design-Fehler hin.<br />
<code>static_cast</code> deutet fast nie auf einen Design-Fehler hin.<br />
<code>const_cast</code> solltest du praktisch nirgends benutzen (außer du hantierst mit irgendwelchen legacy-APIs rum die nicht const-correct sind, oder du nutzt es für Trick 17).</p>
<blockquote>
<p>Man hat bewusst Namen wie static_cast, reinterpret_cast usw. ausgewählt, da sie hässlich aussehen sollen</p>
</blockquote>
<p>Das hört sich zumindest nach absolutem Quatsch an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411053</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 29 Jul 2014 12:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:25:41 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Man hat bewusst Namen wie static_cast, reinterpret_cast usw. ausgewählt, da sie hässlich aussehen sollen</p>
</blockquote>
<p>Das hört sich zumindest nach absolutem Quatsch an.</p>
</blockquote>
<p>Stimmt aber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411060</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:25:41 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:21:20 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Das hört sich zumindest nach absolutem Quatsch an.</p>
</blockquote>
<p><a href="http://www.stroustrup.com/bs_faq2.html#static-cast" rel="nofollow">http://www.stroustrup.com/bs_faq2.html#static-cast</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411061</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:29:35 GMT]]></title><description><![CDATA[<p>Moderator aha.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411067</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:34:02 GMT]]></title><description><![CDATA[<p>Mr.Long schrieb:</p>
<blockquote>
<pre><code>setMatrix(reinterpret_cast&lt;float*&gt;(test));
</code></pre>
</blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Wie waere es mit &amp;test[0][0]?</p>
</blockquote>
<p>Die ultimative Lösung ist <code>flat_begin(test)</code> :</p>
<pre><code class="language-cpp">template &lt;typename T&gt; T *flat_begin(T &amp;x) { return &amp;x; }
template &lt;typename T, size_t N&gt; auto flat_begin(T (&amp;x)[N]) {
  return flat_begin(*x);
}

template &lt;typename T&gt; T *flat_end(T &amp;x) { return &amp;x + 1; }
template &lt;typename T, size_t N&gt; auto flat_end(T (&amp;x)[N]) {
  return flat_begin(x[N]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411070</guid><dc:creator><![CDATA[flatland]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:42:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Das hört sich zumindest nach absolutem Quatsch an.</p>
</blockquote>
<p><a href="http://www.stroustrup.com/bs_faq2.html#static-cast" rel="nofollow">http://www.stroustrup.com/bs_faq2.html#static-cast</a></p>
</blockquote>
</blockquote>
<p>Dass man tatsächlich die Hässlichkeit bedacht hatte wusste ich gar nicht, danke für den Link.</p>
<p>Mr.Long schrieb:</p>
<blockquote>
<p>Moderator aha.</p>
</blockquote>
<p><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="😕"
    /> Was ist denn deine Einsicht?</p>
<p>@flat_land:</p>
<p>camper schrieb:</p>
<blockquote>
<pre><code>template &lt;typename T&gt;
constexpr auto decayed_begin(T&amp;&amp; c) -&gt; decltype(std::begin(std::forward&lt;T&gt;(c)))
{ return std::begin(std::forward&lt;T&gt;(c)); }
 
template &lt;typename T, std::size_t M, size_t N&gt;
constexpr auto decayed_begin(T(&amp;c)[M][N]) -&gt; decltype(decayed_begin(*c))
{ return decayed_begin(*c); }
 
template &lt;typename T&gt;
constexpr auto decayed_end(T&amp;&amp; c) -&gt; decltype(std::end(std::forward&lt;T&gt;(c)))
{ return std::end(std::forward&lt;T&gt;(c)); }
 
template &lt;typename T, std::size_t M, size_t N&gt;
constexpr auto decayed_end(T(&amp;c)[M][N]) -&gt; decltype(decayed_begin(c[M]))
{ return decayed_begin(c[M]); }
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2411073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411073</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:42:04 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:45:48 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>@flat_land:</p>
<p>camper schrieb:</p>
<blockquote>
<pre><code>...
</code></pre>
</blockquote>
</blockquote>
<p>Scheitert schon an dreidimensionalen Arrays, wie kann das besser sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411075</guid><dc:creator><![CDATA[flatland]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:48:45 GMT]]></title><description><![CDATA[<p>Ausserdem ist decayed_begin ein misnomer, ich will von einem <code>int[2][3][4]</code> auf <code>int*</code> und nicht auf <code>int[2][3]*</code> (was decayed bedeutet) oder <code>int***</code> (was deep_decayed bedeutet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411077</guid><dc:creator><![CDATA[flatland]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:54:50 GMT]]></title><description><![CDATA[<p>Du kannst mal meine Version aus <a href="http://www.c-plusplus.net/forum/326669-full" rel="nofollow">demselben Thread</a> versuchen (ungetestet ehrlich gesagt):</p>
<p>asfdlol schrieb:</p>
<blockquote>
<pre><code>template&lt;typename T&gt;
T* RecBegin(T&amp; Object)
{
	return &amp;Object;
}
template&lt;typename T, std::size_t n&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecBegin(T(&amp;Array)[n])
{
	return RecBegin(Array[0]);
}

template&lt;typename T&gt;
T* RecEnd(T&amp; Object)
{
	return &amp;Object;
}
template&lt;typename T, std::size_t n&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecEnd(T(&amp;Array)[n])
{
	return RecBegin(Array[n]);
}
</code></pre>
</blockquote>
<p>Edit:<br />
Achso, du hast gar nicht nach einer Lösung gefragt. Sorry. Bisschen durch den Wind heute. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2411078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411078</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 13:57:19 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>Du kannst mal meine Version aus <a href="http://www.c-plusplus.net/forum/326669-full" rel="nofollow">demselben Thread</a> versuchen (ungetestet ehrlich gesagt):</p>
</blockquote>
<p>Abgesehen von dem Off-By-One error in RecEnd scheint die zu stimmen.</p>
<p>Gute Idee mit remove_all_extents, das macht den Code C++11-konform.</p>
<p>Ich denke der Gewinner ist</p>
<pre><code class="language-cpp">template &lt;typename T&gt; constexpr T *flat_begin(T &amp;x) { return &amp;x; }
template &lt;typename T, size_t N&gt;
constexpr typename std::remove_all_extents&lt;T&gt;::type *flat_begin(T (&amp;x)[N]) {
  return flat_begin(*x);
}

template &lt;typename T&gt; T *flat_end(T &amp;x) { return &amp;x + 1; }
template &lt;typename T, size_t N&gt;
constexpr typename std::remove_all_extents&lt;T&gt;::type *flat_end(T (&amp;x)[N]) {
  return flat_begin(x[N]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2411079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411079</guid><dc:creator><![CDATA[flatland]]></dc:creator><pubDate>Tue, 29 Jul 2014 13:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 14:02:39 GMT]]></title><description><![CDATA[<p>@flat: Ok</p>
<pre><code>#include &lt;iterator&gt;
#include &lt;type_traits&gt;

#define AUTO_RETURN(...) -&gt; decltype(__VA_ARGS__) {return (__VA_ARGS__);}

template &lt;typename T&gt;
constexpr auto decayed_begin(T&amp;&amp; c)
AUTO_RETURN(std::begin(std::forward&lt;T&gt;(c)))

template &lt;typename T&gt;
constexpr auto decayed_end(T&amp;&amp; c)
AUTO_RETURN(std::end(std::forward&lt;T&gt;(c)))

template &lt;typename T, typename std::enable_if&lt;std::is_array&lt;T&gt;::value, std::size_t&gt;::type N&gt;
constexpr typename std::remove_all_extents&lt;T&gt;::type* decayed_begin(T(&amp;c)[N])
{
	return decayed_begin(*c);
}

template &lt;typename T, std::size_t N&gt;
constexpr auto decayed_end(T(&amp;c)[N])
AUTO_RETURN( decayed_begin(c[N]) )
</code></pre>
<p>?</p>
<p>Edit: Zu spät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411083</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 29 Jul 2014 14:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 14:59:08 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>@flat: Ok</p>
</blockquote>
<p>Könntest du wenigstens deinen Code mal testen? ^Und meinen Namen richtig schreiben? Der ist weder flat_land noch flat.^</p>
<pre><code class="language-cpp">const int arr[2][3][4][5]={};
assert(flat_end(arr)-flat_begin(arr) == 2*3*4*5);
std::vector&lt;int&gt; v[2] = {{ 1, 2, 3 }, { 4, 5, 6 }};
auto i = flat_begin(v), e = flat_end(v);
assert(e - i == 2);
int x = 0;
assert(flat_begin(x) + 1 == flat_end(x));
</code></pre>
<p><code>AUTO_RETURN</code> ist übrigens voll out.</p>
<p>Ausserdem habe ich erörtert, wieso decayed_* die falsche Bezeichnung ist.</p>
<p>Das <code>constexpr</code> kannst du übrigens auch streichen, das funktioniert aus irgendwelchen Gründen nicht. Wahrscheinlich hat camper deshalb die Anzahl Dimensionen hardgecoded.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411091</guid><dc:creator><![CDATA[flatland]]></dc:creator><pubDate>Tue, 29 Jul 2014 14:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 15:18:58 GMT]]></title><description><![CDATA[<p>flatland schrieb:</p>
<blockquote>
<p>Mr.Long schrieb:</p>
<blockquote>
<pre><code>setMatrix(reinterpret_cast&lt;float*&gt;(test));
</code></pre>
</blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Wie waere es mit &amp;test[0][0]?</p>
</blockquote>
<p>Die ultimative Lösung ist <code>flat_begin(test)</code> :</p>
<pre><code class="language-cpp">template &lt;typename T&gt; T *flat_begin(T &amp;x) { return &amp;x; }
template &lt;typename T, size_t N&gt; auto flat_begin(T (&amp;x)[N]) {
  return flat_begin(*x);
}

template &lt;typename T&gt; T *flat_end(T &amp;x) { return &amp;x + 1; }
template &lt;typename T, size_t N&gt; auto flat_end(T (&amp;x)[N]) {
  return flat_begin(x[N]);
}
</code></pre>
</blockquote>
<p>Wenn das das Problem ist, das du lösen wolltest...</p>
<p>flatland schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>@flat_land:</p>
<p>camper schrieb:</p>
<blockquote>
<pre><code>...
</code></pre>
</blockquote>
</blockquote>
<p>Scheitert schon an dreidimensionalen Arrays, wie kann das besser sein?</p>
</blockquote>
<p>Der Code ist offenbar schlecht, weil zu subtil. Im Übrigen hast du unrecht.</p>
<p>flatland schrieb:</p>
<blockquote>
<p>Ausserdem ist decayed_begin ein misnomer, ich will von einem <code>int[2][3][4]</code> auf <code>int*</code> und nicht auf <code>int[2][3]*</code> (was decayed bedeutet) oder <code>int***</code> (was deep_decayed bedeutet).</p>
</blockquote>
<p>und das heisst jetzt was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411094</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 29 Jul 2014 15:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Tue, 29 Jul 2014 19:11:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Könntest du wenigstens deinen Code mal testen?</p>
</blockquote>
<p>Das habe ich:</p>
<pre><code>#include &lt;iterator&gt;
#include &lt;type_traits&gt;

#define AUTO_RETURN(...) -&gt; decltype(__VA_ARGS__) {return (__VA_ARGS__);}

template &lt;typename T&gt;
constexpr auto decayed_begin(T&amp;&amp; c)
AUTO_RETURN(std::begin(std::forward&lt;T&gt;(c)))

template &lt;typename T&gt;
constexpr auto decayed_end(T&amp;&amp; c)
AUTO_RETURN(std::end(std::forward&lt;T&gt;(c)))

template &lt;typename T, typename std::enable_if&lt;std::is_array&lt;T&gt;::value, std::size_t&gt;::type N&gt;
constexpr typename std::remove_all_extents&lt;T&gt;::type* decayed_begin(T(&amp;c)[N])
{
	return decayed_begin(*c);
}

template &lt;typename T, std::size_t N&gt;
constexpr auto decayed_end(T(&amp;c)[N])
AUTO_RETURN( decayed_begin(c[N]) )

#include &lt;iostream&gt;

int main()
{
	int arr[4][3][2] { 2, 3, 5, 7, 11,
	                   13, 17, 19, 23, 29,
	                   31, 37, 41, 43, 47,
	                   53, 59, 61, 67, 71,
	                   73, 79, 83, 89 };

	std::copy( decayed_begin(arr), decayed_end(arr), std::ostream_iterator&lt;int&gt;{std::cout, &quot; &quot;} );
}
</code></pre>
<p>Allerdings gibt es hier einen recht subtilen Ambiguitäts-Bug, der durch dein Beispiel hervorgehoben und durch</p>
<pre><code>template &lt;typename T, typename std::enable_if&lt;std::is_array&lt;T&gt;::value, std::size_t&gt;::type N&gt;
constexpr auto decayed_end(T(&amp;c)[N])
AUTO_RETURN( decayed_begin(c[N]) )
</code></pre>
<p>gelöst wird.</p>
<p>Ist dein <code>flat_begin</code> aus der &quot;Gewinnerlösung&quot; nicht völliger Quatsch? Funktioniert bei einem Container doch gar nicht?</p>
<p>Jetzt funktioniert auch dein Testcode, mit Ausnahme der letzten beiden Zeilen - die sind aber auch nicht sinnvoll. Eine Variable ist keine Range.</p>
<blockquote>
<p>Ausserdem habe ich erörtert, wieso decayed_* die falsche Bezeichnung ist.</p>
</blockquote>
<p>Ist mir egal.</p>
<blockquote>
<p>Und meinen Namen richtig schreiben?</p>
</blockquote>
<p>Der ist mir noch egaler.</p>
<p>Übrigens ist es out andere Leute penibel zu korrigieren. Es geht um Ideen und nicht um Namen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411143</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 29 Jul 2014 19:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Methode übergeben?! on Wed, 30 Jul 2014 07:36:46 GMT]]></title><description><![CDATA[<p><code>AUTO_RETURN</code> ist im Übrigen ganz und gar nicht out; ist auch in C++14 für Expression-SFINAE sehr nützlich.</p>
<p>Hier habe ich es verwendet weil ich C++11-Kompabilität haben wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411144</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 30 Jul 2014 07:36:46 GMT</pubDate></item></channel></rss>