<?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[non-const-Getter aus const-Version ableiten?]]></title><description><![CDATA[<p>Hi,</p>
<p>geht Folgendes bzw. würdet ihr es empfehlen?</p>
<pre><code class="language-cpp">class A
{
public:
    const B&amp; GetB() const
    {
        // recht viel Code
    }

    B&amp; GetB()
    {
        // duplicate code wäre unschön, also:
        return const_cast&lt;B&amp;&gt;(static_cast&lt;const A*&gt;(this)-&gt;GetB());
    }
};
</code></pre>
<p>oder hat das irgendwelche Nachteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314021/non-const-getter-aus-const-version-ableiten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 16:47:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314021.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2013 21:12:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 21:12:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>geht Folgendes bzw. würdet ihr es empfehlen?</p>
<pre><code class="language-cpp">class A
{
public:
    const B&amp; GetB() const
    {
        // recht viel Code
    }

    B&amp; GetB()
    {
        // duplicate code wäre unschön, also:
        return const_cast&lt;B&amp;&gt;(static_cast&lt;const A*&gt;(this)-&gt;GetB());
    }
};
</code></pre>
<p>oder hat das irgendwelche Nachteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299580</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 17 Feb 2013 21:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 21:24:27 GMT]]></title><description><![CDATA[<blockquote>
<p>geht Folgendes</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>würdet ihr es empfehlen?</p>
</blockquote>
<p>Nein (das würde implizieren, dass ich es für gut empfinde).</p>
<p>Ernsthafte Alternativen kenne ich in C++ allerdings keine, manchmal (eigentlich nie, habe selten setter, schon gar nicht so komplizierte) mache ich es dann so wie du gezeigt hast.</p>
<p>Ich vermisse in C++ etwas wie</p>
<pre><code class="language-cpp">inout B GetB() inout
{
    // recht viel Code
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2299588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299588</guid><dc:creator><![CDATA[gangbar]]></dc:creator><pubDate>Sun, 17 Feb 2013 21:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 21:54:41 GMT]]></title><description><![CDATA[<p>Ich hab irgendwo mal gelesen, dass man das sogar so machen soll aber empfehlen wuerde ich es selber auch nicht.<br />
Besser waere es wenn moeglich den vielen Code in eigene Methoden zu packen, sodass die Getter nur minimalen Code haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299595</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Sun, 17 Feb 2013 21:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 21:56:42 GMT]]></title><description><![CDATA[<p>So viel Code ist es jetzt auch nicht, es handelt sich um eine Suchfunktion. Aus einer Liste soll ein bestimmtes Element genommen werden und das wird zurückgegeben.</p>
<p>Würde ich die Suche jetzt in eine eigene Funktion auslagern, hätte ich doch dasselbe Problem wieder? Meine Suche ist nicht Mal binär, sondern iterativ. Und der Schleifeniterator ist eben auch const oder nicht-const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299596</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 17 Feb 2013 21:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 21:58:43 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">So viel Code ist es jetzt auch nicht, es handelt sich um eine Suchfunktion.
</code></pre>
<p>Kennst du std::find?</p>
<p>Die Antwort in deinem Fall ist also: Schreib dir deinen eigenen Iterator + Const-Iterator. Die dort auftretende Codeduplikation kannst du mit Templates lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299597</guid><dc:creator><![CDATA[gangbar]]></dc:creator><pubDate>Sun, 17 Feb 2013 21:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 22:19:48 GMT]]></title><description><![CDATA[<p>Wenn std::find nicht genuegt gibts ja noch std::find_if, dann kannste die Bedingungen an dem Element in eine extra funktion (oder auch lambda, wenn es nicht zu viel Code ist) pruefen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299602</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Sun, 17 Feb 2013 22:19:48 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Sun, 17 Feb 2013 22:42:59 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Ich hab irgendwo mal gelesen, dass man das sogar so machen soll</p>
</blockquote>
<p>Joa, ich glaube die Empfehlung kommt von Scott Meyers - Effective C++. Obwohl er es so macht:</p>
<pre><code>return const_cast&lt;B&amp;&gt;( static_cast&lt;const A&amp;&gt;( *this ).get() );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2299605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299605</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 17 Feb 2013 22:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 07:08:50 GMT]]></title><description><![CDATA[<p>Ja, Scott Meyers empfiehlt das in seinem Effective C++.</p>
<p>Normalerweise denkt man ja eher umgekehrt, also so:</p>
<pre><code>class Foo
{
	Bar x;
public:
	Bar&amp; getX()
	{
		return this-&gt;x;
	}

	const Bar&amp; getX() const
	{
		return this-&gt;getX();
	}
};
</code></pre>
<p>Aber das ist nicht wirklich const-correct, da die const Version nicht dann aufgerufen wird, wenn man es erwartet (und umgekehrt). Wer die Begründung genau wissen will, dem zitiere ich das hier vom Meyers.</p>
<p>Die Methode oben würde ich schon empfehlen, in eine Funktion abkapseln kann man ja immer noch. Ich weiss auch nicht was daran hässlich oder unschön sein soll? Ist halt besser als redundanter Code...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299632</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 18 Feb 2013 07:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 08:38:51 GMT]]></title><description><![CDATA[<p>find_if kenne ich, das wäre aber auch nicht kürzer. Ich würde dennoch redundanten Code erzeugen, den ich ungern zwei Mal schreiben würde, egal wie kurz er ist (kann ja auf Dauer noch länger werden, dann muss ich trotzdem zwei Mal anpassen).</p>
<p>Skym0sh0:<br />
Das wäre doch einfach Endlosrekursion, oder? In der const-Variante ist der this-Zeiger doch immer noch const, also wird auch wieder die const-Variante aufgerufen.</p>
<p>Wenn der Scott Meyers das empfiehlt, kann die Methode ja nicht so falsch sein. Wunderbar, vielen Dank! <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/2299649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299649</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Feb 2013 08:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 08:43:29 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>find_if kenne ich, das wäre aber auch nicht kürzer. Ich würde dennoch redundanten Code erzeugen, den ich ungern zwei Mal schreiben würde, egal wie kurz er ist (kann ja auf Dauer noch länger werden, dann muss ich trotzdem zwei Mal anpassen).</p>
</blockquote>
<p>Ein getter ist eine Zeile lang. Nicht mehr und nicht weniger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299652</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 18 Feb 2013 08:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 09:09:14 GMT]]></title><description><![CDATA[<p>Ich habe schon beschrieben, dass meine Suche ein Finden in einem Container impliziert. Ich habe auch nicht gesagt, nach welchen Kriterien ich durchsuche und ob das Finden des Elements auf einem trivialen Attributvergleich basiert.</p>
<p>Und ob man unter:</p>
<pre><code class="language-cpp">Containter::iterator it = std::find_if(container.begin(), container.end(), [whatEver](Object&amp; obj)
{
    return obj.whatEver == whatEver;
});
return it == container.end() ? nullptr : &amp;*it;
</code></pre>
<p>jetzt einen Einzeiler verstehen muss, würde ich auch anzweifeln.</p>
<p>Gerne kann mir jemand aber auch den Vorteil zu:</p>
<pre><code class="language-cpp">BOOST_FOREACH(Object&amp; obj, container)
{
    if(obj.whatEver == whatEver)
        return &amp;obj;
}
return nullptr;
</code></pre>
<p>erklären, letzteres erscheint mir nämlich kürzer und lesbarer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299658</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Feb 2013 09:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 09:25:01 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>geht Folgendes bzw. würdet ihr es empfehlen?</p>
</blockquote>
<p>Wenn das so Sinn macht mit der Überladung, 2mal ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299661</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 18 Feb 2013 09:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 11:59:34 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Und ob man unter [...] jetzt einen Einzeiler verstehen muss, würde ich auch anzweifeln.</p>
</blockquote>
<p>Deine Funktion ist auch kein typischer Getter, sondern ein Sucher. &quot;get&quot; heisst &quot;gib mir&quot; -- entsprechend ist die Erwartung, dass man das Gewünschte auch bekommt. Bei dir hingegen kann der zurückgegebene Wert ungültig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299686</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 18 Feb 2013 11:59:34 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 12:25:10 GMT]]></title><description><![CDATA[<p>Nagut, ich kenne da solche Spezialbegriffe nicht. Dass der Getter nicht trivial ist, sollte ja von Anfang an klar gewesen sein. Und in die weite Definition von einem Getter hätte ich das Ding ja durchaus eingeordnet oder nicht? Sucher habe ich noch nie gehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299693</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 18 Feb 2013 12:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to non-const-Getter aus const-Version ableiten? on Mon, 18 Feb 2013 14:09:45 GMT]]></title><description><![CDATA[<p>&quot;Sucher&quot; ist kein offizieller Begriff, den hab ich gerade erfunden <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="😉"
    /></p>
<p>Ja, im weiten Sinne <em>könnte</em> man vieles als Getter sehen, z.B. auch <code>operator[]</code> ... Die Frage ist, wo du die Grenze ziehst. Nicht alles, was etwas zurückgibt, ist ein Getter, sonst wird der Begriff bedeutungslos. Ich versuchte mit meinem Post nur zu erklären, was Shade Of Mine wahrscheinlich meinte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299713</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 18 Feb 2013 14:09:45 GMT</pubDate></item></channel></rss>