<?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[[]-operator und Schreibzugriffe]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe in meiner Klasse den []-Operator überladen. Nun ist es so, dass Lesezugriffe ohne weiteres möglich sein sollen (d.h. es wird einfach ein Wert zurückgegeben) während bei Schreibzugriffen interne Daten verändert (neu berechnet) werden müssen.</p>
<p>Da die Neuberechnung der Daten relativ zeitintensiv ist und Schreibzugriffe im Vergleich zu Lesezugriffen auch sehr selten vorkommen, möchte ich nicht unnötig eine Neuberechnung starten, wenn das nicht notwendig ist.</p>
<p>Kann man irgendwie feststellen, ob bei der Verwendung des []-Operators eine Zuweisung gemacht wird, (z.B. instanz[10] = 30;) oder ob nur gelesen wird (a = instanz[3];)?</p>
<p>Konkret handelt es sich bei meiner Klasse um einen Container für Koordinaten im 3D-Raum (für eine Grafikanwendung). Daten sollen jederzeit gelesen werden können, während beim Änderung von Daten (also bei Schreibzugriffen) diverse Werte, wie beispielsweise die Bounding Box einer Figur, aktualisiert werden müssen.</p>
<p>Direkt feststellen ob es ein Schreibzugriff ist geht vermutlich nicht, weil dieser ja eigentlich erst nach Ende des Operators erfolgt. Wie würdet ihr diese Funktionalität sonst implementieren?</p>
<p>Danke im Voraus.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147094/operator-und-schreibzugriffe</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 03:40:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147094.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 May 2006 19:57:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to []-operator und Schreibzugriffe on Sat, 13 May 2006 19:57:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe in meiner Klasse den []-Operator überladen. Nun ist es so, dass Lesezugriffe ohne weiteres möglich sein sollen (d.h. es wird einfach ein Wert zurückgegeben) während bei Schreibzugriffen interne Daten verändert (neu berechnet) werden müssen.</p>
<p>Da die Neuberechnung der Daten relativ zeitintensiv ist und Schreibzugriffe im Vergleich zu Lesezugriffen auch sehr selten vorkommen, möchte ich nicht unnötig eine Neuberechnung starten, wenn das nicht notwendig ist.</p>
<p>Kann man irgendwie feststellen, ob bei der Verwendung des []-Operators eine Zuweisung gemacht wird, (z.B. instanz[10] = 30;) oder ob nur gelesen wird (a = instanz[3];)?</p>
<p>Konkret handelt es sich bei meiner Klasse um einen Container für Koordinaten im 3D-Raum (für eine Grafikanwendung). Daten sollen jederzeit gelesen werden können, während beim Änderung von Daten (also bei Schreibzugriffen) diverse Werte, wie beispielsweise die Bounding Box einer Figur, aktualisiert werden müssen.</p>
<p>Direkt feststellen ob es ein Schreibzugriff ist geht vermutlich nicht, weil dieser ja eigentlich erst nach Ende des Operators erfolgt. Wie würdet ihr diese Funktionalität sonst implementieren?</p>
<p>Danke im Voraus.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057265</guid><dc:creator><![CDATA[ChrisR]]></dc:creator><pubDate>Sat, 13 May 2006 19:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to []-operator und Schreibzugriffe on Sat, 13 May 2006 20:09:11 GMT]]></title><description><![CDATA[<p>Dafür kannst du ein Proxy-Objekt zurückgeben, das einen überladenen operator Typ und einen operator= hat, der die Änderungen vornimmt:</p>
<pre><code class="language-cpp">// Simples Beispiel:
template &lt;typename Element&gt;
class Container
{
    void regen ()
    {
        // Mach was sinnvolles
    }

    class Proxy
    {
    public:
        Proxy (Container&amp; c, Element&amp; e) : _ref (c), _el (e)
        {}

        operator Element ()
        {
            return _el;
        }

        void operator= (const Element&amp; e)
        {
            _el = e;
            _ref.regen ();
        }
    private:
        Container&amp; _ref;
        Element&amp; _el;
    };

public:
    // ...
    Proxy operator[] (unsigned int i)
    {
        return Proxy (*this, _a[i]);
    }

    const Element&amp; operator[] (unsigned int i) const
    {
        return _a[i];
    }

private:
    Element _a[10];
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1057266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057266</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 13 May 2006 20:09:11 GMT</pubDate></item></channel></rss>