<?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[Setter&#x2F;Getter und C-Bibliothek]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe z.B. folgende Klasse:</p>
<pre><code class="language-cpp">class Foo
{
  private:
    int D;
  public:
    const int&amp; Data() const{return D;}
    int&amp; Data(){return D;}
};
</code></pre>
<p>Soweit, so gut. Nun habe ich eine Bibliothek, die in C geschrieben wurde. Diese hat eine Funktion, welche ein <code>int</code> erfordert. Nun schreibe ich eine Funktion, die ein beliebiges <code>Foo</code> -Objekt zum aktuellen Objekt macht:</p>
<pre><code class="language-cpp">void MakeCurrent(const Foo&amp; Object)
{
  CLib_GimmeSomeInt(Foo.Data()); //Funktionssignatur: void CLib_GimmeSomeInt(int)
}
</code></pre>
<p>Nun mein Problem: Wenn ein User kommt, eine Instanz von <code>Foo</code> erzeugt, <code>MakeCurrent</code> mit dieser Instanz aufruft und nach dem Aufruf die Instanz ändert, denkt er doch sicher, dass sich die Änderung der Instanz auch auf die C-Bibliothek ausgewirkt hat. Dem ist aber nicht so, da die C-Bibliothek eine Kopie für sich selbst angefertigt hat.</p>
<p>Lösungen:<br />
<code>GetData</code> und <code>SetData</code> machen (finde ich extrem hässlich)<br />
Im regelmäsigem Interval <code>MakeCurrent</code> automatisch mit dem letzten Parameter aufrufen (ist ja 'n Witz)<br />
Irgendwie Wrappen (hässlich und im konkreten Fall habe ich mehrere Datentypen)<br />
Irgend eine Lösung auf die ich noch nicht gekommen bin</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290539/setter-getter-und-c-bibliothek</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 13:27:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290539.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Jul 2011 13:41:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Setter&#x2F;Getter und C-Bibliothek on Thu, 28 Jul 2011 13:41:10 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe z.B. folgende Klasse:</p>
<pre><code class="language-cpp">class Foo
{
  private:
    int D;
  public:
    const int&amp; Data() const{return D;}
    int&amp; Data(){return D;}
};
</code></pre>
<p>Soweit, so gut. Nun habe ich eine Bibliothek, die in C geschrieben wurde. Diese hat eine Funktion, welche ein <code>int</code> erfordert. Nun schreibe ich eine Funktion, die ein beliebiges <code>Foo</code> -Objekt zum aktuellen Objekt macht:</p>
<pre><code class="language-cpp">void MakeCurrent(const Foo&amp; Object)
{
  CLib_GimmeSomeInt(Foo.Data()); //Funktionssignatur: void CLib_GimmeSomeInt(int)
}
</code></pre>
<p>Nun mein Problem: Wenn ein User kommt, eine Instanz von <code>Foo</code> erzeugt, <code>MakeCurrent</code> mit dieser Instanz aufruft und nach dem Aufruf die Instanz ändert, denkt er doch sicher, dass sich die Änderung der Instanz auch auf die C-Bibliothek ausgewirkt hat. Dem ist aber nicht so, da die C-Bibliothek eine Kopie für sich selbst angefertigt hat.</p>
<p>Lösungen:<br />
<code>GetData</code> und <code>SetData</code> machen (finde ich extrem hässlich)<br />
Im regelmäsigem Interval <code>MakeCurrent</code> automatisch mit dem letzten Parameter aufrufen (ist ja 'n Witz)<br />
Irgendwie Wrappen (hässlich und im konkreten Fall habe ich mehrere Datentypen)<br />
Irgend eine Lösung auf die ich noch nicht gekommen bin</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099020</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 28 Jul 2011 13:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to Setter&#x2F;Getter und C-Bibliothek on Thu, 28 Jul 2011 13:52:19 GMT]]></title><description><![CDATA[<p>Statt <code>int&amp;</code> ein Proxy zurückgeben, dessen <code>operator=</code> die C-Bibliothek synchron hält.</p>
<p>Ansonsten solltest du dir sinnvolle Kapselung überlegen, Referenzen auf veränderliche Objekte zurückzugeben ist oft fragwürdig. Warum ist <code>D</code> nicht gleich öffentlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099028</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 28 Jul 2011 13:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Setter&#x2F;Getter und C-Bibliothek on Thu, 28 Jul 2011 14:03:36 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Statt <code>int&amp;</code> ein Proxy zurückgeben, dessen <code>operator=</code> die C-Bibliothek synchron hält.</p>
</blockquote>
<p>Der Zuweisungsoperator ist ja nicht der Einzige, der den Wert verändern kann.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Warum ist <code>D</code> nicht gleich öffentlich?</p>
</blockquote>
<p>Im konkreten Fall hat die Klasse noch Methoden, die das Ganze verändern. Aber ich könnte aus der Klasse ein POD machen und die Methoden zu freien Funktionen machen.</p>
<p>EDIT: Ich könnte den User einfach mit der Aufgabe, selbst upzudaten, zurücklassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099031</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 28 Jul 2011 14:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Setter&#x2F;Getter und C-Bibliothek on Thu, 28 Jul 2011 14:14:39 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Der Zuweisungsoperator ist ja nicht der Einzige, der den Wert verändern kann.</p>
</blockquote>
<p>Nein, aber er wird dafür am häufigsten verwendet. Du kannst ja auch noch andere Operatoren überladen, wenn sich der Wert eher wie ein <code>int</code> verhalten soll. Ganz hinkriegen wirst du die Ähnlichkeit aber nicht.</p>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>EDIT: Ich könnte den User einfach mit der Aufgabe, selbst upzudaten, zurücklassen.</p>
</blockquote>
<p>Und diese Benutzerunfreundlichkeit wofür? Weil du den Zugriff auf <code>D</code> nicht ordentlich kapseln willst?</p>
<p>Der Fall, in dem bei der Änderung einer Objekt-Eigenschaft automatisch noch etwas Zusätzliches getan werden muss, ist ein Paradebeispiel für die Notwendigkeit einer Set-Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099042</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 28 Jul 2011 14:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Setter&#x2F;Getter und C-Bibliothek on Thu, 28 Jul 2011 14:45:58 GMT]]></title><description><![CDATA[<p>Ja, das mit dem Proxy ist ein Angebot. Wie wäre es, wenn ich die Funktion &quot; <code>Sync</code> &quot; oder gleichbedeutend nennen würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099045</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 28 Jul 2011 14:45:58 GMT</pubDate></item></channel></rss>