<?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[funktionenpointer]]></title><description><![CDATA[<p>hallo,<br />
also ich habe eine klasse die sich von einer array-klasse ableitet, allerdings als private, da der benutzer nicht direkt auf das array zugreifen darf. ich möchte dem nutzer allerdings erlauben das array zu sortieren und zwar mit einer sortierfunktion nach seinem belieben. es dürfen also die positionen der elemente aber die elemente selbst nicht geändert werden. die frage ist jetzt ob das geht und wenn ja wie. die sortierfunktion soll dann quasi als funktionpointer übergeben werden.<br />
als Beispiel</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class A : private array&lt;t&gt;
{
  //...
  public:
    A &amp;sort(array&lt;t&gt; &amp;(*sorting)(array&lt;t&gt; &amp;))
    {
      if(sorting)
        return sorting(*this);
      return *this;
    };
  //...
};
</code></pre>
<p>also meine erste idee war sowas wie</p>
<pre><code class="language-cpp">void sort(array&lt;t&gt; &amp;(*sorting)(array&lt;t const&gt; &amp;))
</code></pre>
<p>allerdings funktioniert das auch nicht. also die frage ist ob es überhaupt geht nur die positionen ändern zu lassen, oder ob ich bei einem solchen funktionspointer immer das problem habe, dass der benutzer mit dem array quasi alles machen kann? damit wäre das ja dann eine hintertür um das private zu umgehen und alle standardmäßig zur verfügungstehenden public-funktionen von array zu nutzen, was ich ja eben verhindern wollte. der benutzer hat also nur lesenden zugriff auf das array und darf höchstens elemente innerhalb des arrays vertauschen, aber nicht ändern.<br />
vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220943/funktionenpointer</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 13:07:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220943.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Aug 2008 11:10:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to funktionenpointer on Sat, 23 Aug 2008 11:10:05 GMT]]></title><description><![CDATA[<p>hallo,<br />
also ich habe eine klasse die sich von einer array-klasse ableitet, allerdings als private, da der benutzer nicht direkt auf das array zugreifen darf. ich möchte dem nutzer allerdings erlauben das array zu sortieren und zwar mit einer sortierfunktion nach seinem belieben. es dürfen also die positionen der elemente aber die elemente selbst nicht geändert werden. die frage ist jetzt ob das geht und wenn ja wie. die sortierfunktion soll dann quasi als funktionpointer übergeben werden.<br />
als Beispiel</p>
<pre><code class="language-cpp">template&lt;class t&gt;
class A : private array&lt;t&gt;
{
  //...
  public:
    A &amp;sort(array&lt;t&gt; &amp;(*sorting)(array&lt;t&gt; &amp;))
    {
      if(sorting)
        return sorting(*this);
      return *this;
    };
  //...
};
</code></pre>
<p>also meine erste idee war sowas wie</p>
<pre><code class="language-cpp">void sort(array&lt;t&gt; &amp;(*sorting)(array&lt;t const&gt; &amp;))
</code></pre>
<p>allerdings funktioniert das auch nicht. also die frage ist ob es überhaupt geht nur die positionen ändern zu lassen, oder ob ich bei einem solchen funktionspointer immer das problem habe, dass der benutzer mit dem array quasi alles machen kann? damit wäre das ja dann eine hintertür um das private zu umgehen und alle standardmäßig zur verfügungstehenden public-funktionen von array zu nutzen, was ich ja eben verhindern wollte. der benutzer hat also nur lesenden zugriff auf das array und darf höchstens elemente innerhalb des arrays vertauschen, aber nicht ändern.<br />
vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570016</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Sat, 23 Aug 2008 11:10:05 GMT</pubDate></item><item><title><![CDATA[Reply to funktionenpointer on Sun, 24 Aug 2008 09:01:12 GMT]]></title><description><![CDATA[<p>Ist jetzt n bisschen ne andere Idee, aber du könntest in deiner Klasse &quot;A&quot; Funktionen, wie &quot;ArrSwap&quot; oder so für das Array anbieten, auf welche der Benutzer dann zurückgreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570357</guid><dc:creator><![CDATA[Paul Manns]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to funktionenpointer on Sun, 24 Aug 2008 09:21:33 GMT]]></title><description><![CDATA[<p>Deine Bedenken sind durchaus gerechtfertigt. Bei der Übergabe eines Funktionspointers, der lesenden und schreibenden Zugriff hat, kann das gesamte Array geändert werden.</p>
<p>Entweder du machst es, wie Paul Manns gesagt hat, indem du nur eine Funktion zum Vertauschen zweier Elemente im Array zur Verfügung stellst, oder du hast eine Funktion, die ein <code>int</code> -Array als Parameter übernimmt. In diesem Array ist die neue Reihenfolge der Indizes gespeichert, sodass man zuerst eine Reihenfolge festlegt und an die Klasse übergibt. Die Klasse übernimmt dann die Sortierung selbsständig nach dieser Reihenfolge (natürlich nach einer Gültigkeitsprüfung).</p>
<p>Beide Funktionen bedingen jedoch lesenden Zugriff auf einzelne Elemente des Arrays. Ich würde dazu eine Methode einrichten, die ein <code>int</code> für den Index als Parameter hat und eine Const-Referenz auf das jeweilige Array-Element zurückgibt.</p>
<p><em>So, mein 1000. Beitrag in diesem Forum <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="😉"
    /></em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570360</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to funktionenpointer on Sun, 24 Aug 2008 17:21:03 GMT]]></title><description><![CDATA[<p>@FreakyBKA<br />
Mach es doch einfach so dass der Benutzer ein binary predicate übergeben kann, also so wie es z.B. std::sort auch macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570597</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Aug 2008 17:21:03 GMT</pubDate></item></channel></rss>