<?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[Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen?]]></title><description><![CDATA[<p>Hi,</p>
<p>wie löst ihr das immer wiederkehrende Problem der Codeduplizierung, wenn ihr einmal eine Version <strong>irgendwas &amp; getFoo()</strong> und einmal <strong>const irgendwas &amp; getFoo() const</strong> habt, welche eigentlich das gleiche tun, nur einmal eben Schreiben erlauben und einmal eben nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264215/wie-einmal-const-und-einmal-normale-version-einer-funktion-in-eine-implementierung-packen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 01:17:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264215.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Apr 2010 12:35:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Sun, 04 Apr 2010 12:35:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie löst ihr das immer wiederkehrende Problem der Codeduplizierung, wenn ihr einmal eine Version <strong>irgendwas &amp; getFoo()</strong> und einmal <strong>const irgendwas &amp; getFoo() const</strong> habt, welche eigentlich das gleiche tun, nur einmal eben Schreiben erlauben und einmal eben nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877453</guid><dc:creator><![CDATA[Ein C++ Anfänger]]></dc:creator><pubDate>Sun, 04 Apr 2010 12:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Sun, 04 Apr 2010 12:44:15 GMT]]></title><description><![CDATA[<p>Ich schreibe beide Versionen aus. Diese Fall kommt zwar immer mal wieder gelegentlich vor, aber bei weitem nicht so häufig, als dass man sich tolle Techniken überlegen müsste um Codeduplizierung zu vermeiden. Getter sind üblicherweise Einzeiler die sich nie verändern und man kann die nicht-const Version in wenigen Sekunden kopieren und zu const umschreiben. Alles weitere lohnt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877455</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Apr 2010 12:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Sun, 04 Apr 2010 17:30:30 GMT]]></title><description><![CDATA[<p>Mir geht es genauso wie SeppJ. Bisher wäre mir mit einem Versuch, Codeduplizierung zu vermeiden, meist nur noch viel mehr Code (reiner Overhead ohne wirkliche Logik) entstanden.</p>
<p>Ansonsten kannst du eine private Methode anbieten, die zwar <code>const</code> -qualifiziert ist, aber ein Objekt oder eine Referenz/Zeiger auf Non-Const-Objekte zurückgibt. Manche Leute halten diese Situation auch für einen der wenigen berechtigten Anwendungen von <code>const_cast</code> . Ich selbst habe es noch nie wirklich benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877557</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 04 Apr 2010 17:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Mon, 05 Apr 2010 08:41:56 GMT]]></title><description><![CDATA[<p>Was spricht gegen</p>
<pre><code>const irgendwas &amp; getFoo() 
{
    return getFoo();
}
</code></pre>
<p>?</p>
<p>Wenn wenn das Call+Return stört kann man ja auch eine inline-Funktion aus getFoo() machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877709</guid><dc:creator><![CDATA[stefan-tiger]]></dc:creator><pubDate>Mon, 05 Apr 2010 08:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Mon, 05 Apr 2010 09:04:51 GMT]]></title><description><![CDATA[<p>stefan-tiger schrieb:</p>
<blockquote>
<p>Was spricht gegen</p>
<pre><code class="language-cpp">const irgendwas &amp; getFoo() 
{
    return getFoo();
}
</code></pre>
</blockquote>
<p>Dass die Funktion nicht <code>const</code> -qualifiziert ist und somit nicht bei konstanten Objekten aufgerufen werden kann. Sobald sie aber <code>const</code> -qualifiziert wäre, könnte sie keine Nicht- <code>const</code> -Funktionen mehr aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877719</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Mon, 05 Apr 2010 16:28:44 GMT]]></title><description><![CDATA[<blockquote>
<p>Manche Leute halten diese Situation auch für einen der wenigen berechtigten Anwendungen von const_cast. Ich selbst habe es noch nie wirklich benötigt.</p>
</blockquote>
<p>ich halts eher so: implementiere die const variante und verwende die dann in der non-const version mit 'nem const_cast. Gabs wohl auch ein Scott Meyers - item zu....<br />
Ich hab halt eine manchmal irrationalte Abneigung gegen copy - paste....</p>
<p>Viele Gruesse,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877912</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Mon, 05 Apr 2010 16:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Tue, 06 Apr 2010 09:19:01 GMT]]></title><description><![CDATA[<p>Wirklich häufig taucht das Problem bei mir auch nicht auf, aber es sind halt immer solche Fälle in denen man zwei Codepfade hat die man Warten muss. Wenn nur ein Attribut zurückgeliefert wird ist es auch gar kein Problem, in meinem Fall wird allerdings ein Element aus einem Cache zurückgeliefert und im Falle eines Schreibzugriffs muss ich mir merken, dass die Daten jetzt modifiziert wurden und auf Festplatte zurückgeschrieben werden müssen. Aber ich hab es jetzt ganz einfach gelöst, statt eine Referenz auf das Element gibt es jetzt einfach ein <strong>irgendwas read(unsigned irgendwasId) const</strong> und ein <strong>void write(unsigned irgendwasId, const irgendwas &amp;foo)</strong>, alles andere wäre ja nur Kosmetik <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/1878153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878153</guid><dc:creator><![CDATA[Ein C++ Anfänger]]></dc:creator><pubDate>Tue, 06 Apr 2010 09:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Tue, 06 Apr 2010 09:28:27 GMT]]></title><description><![CDATA[<p>Solche Funktionen sind im Normalfall maximal Zweizeiler, da lohnt es nicht sich irgendeinen Aufwand zu überlegen und mit unschönen const_casts zu hantieren... Kopieren reicht <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/1878160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878160</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 06 Apr 2010 09:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wie einmal const und einmal normale Version einer Funktion in eine Implementierung packen? on Tue, 06 Apr 2010 10:28:33 GMT]]></title><description><![CDATA[<p>Ein C++ Anfänger schrieb:</p>
<blockquote>
<p>Aber ich hab es jetzt ganz einfach gelöst, statt eine Referenz auf das Element gibt es jetzt einfach ein <strong>irgendwas read(unsigned irgendwasId) const</strong> und ein <strong>void write(unsigned irgendwasId, const irgendwas &amp;foo)</strong>, alles andere wäre ja nur Kosmetik <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>Die Variante mit Value-Getter/-Setter und die Referenz-Getter Variante sind IMO ziemlich unterschiedlich.<br />
Mit Value-Getter/-Setter hast du ne gute Kapselung, dafür kann der User gewisse Dinge nicht machen (wie z.B. Member-Funktionen auf &quot;irgendwas&quot; aufrufen).<br />
Mit der Referenz-Getter ermöglichst du das (Aufruf von Member-Funktionen), dafür ist wie gesagt die Kapselung mehr oder weniger futsch.</p>
<p>Ich würde das nicht anhand der Syntax entscheiden, sondern danach was du eigentlich haben bzw. erlauben willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878199</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 06 Apr 2010 10:28:33 GMT</pubDate></item></channel></rss>