<?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[Code-Duplizierung vermeiden für const- und nonconst- Accessor]]></title><description><![CDATA[<p>Ich bin zZt dabei, eine Implementierung von std::vector zu schreiben (ursprünglich angefangen um eine Iteratorklasse für einen meiner Artikel zu testen). Dabei bin ich darüber gestolpert, dass diverse Zugriffsmethoden jeweils eine const und nonconst-Methode haben.<br />
Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class vector
{
private:
  T* data;
  typedef T* pointer;
  typedef T const* const_pointer;
  //etc.

  pointer ptrbegin() {return data;}
  const_pointer ptrbegin() const {return data;}
  pointer ptrend() {return ptrbegin() + size();}                          // + const
public:
  iterator begin() {return ptrbegin(); /*automatische konvertierung*/}    // + const
  iterator end() {return ptrend(); /*automatische konvertierung*/}        // + const
  /** weitere:
   * rbegin()
   * rend()
   * operator[]()
   * at()
   **/
};
</code></pre>
<p>All diese Methoden haben bis auf ein const_ vorne am Rückgabetyp und den const-specifier für die Methode die selbe Signatur und die selbe Implementierung für die const- und nonconst-Version.</p>
<p>Das selbe Problem wird hier auch angesprochen: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-241290.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-241290.html</a><br />
Sieht jemand ne Lösung wie das zu meisten ist? (durch das const_ am Rückgabetyp wird wohl nur ein Makro in Frage kommen)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241329/code-duplizierung-vermeiden-für-const-und-nonconst-accessor</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 14:36:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241329.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2009 07:48:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Code-Duplizierung vermeiden für const- und nonconst- Accessor on Tue, 19 May 2009 07:48:57 GMT]]></title><description><![CDATA[<p>Ich bin zZt dabei, eine Implementierung von std::vector zu schreiben (ursprünglich angefangen um eine Iteratorklasse für einen meiner Artikel zu testen). Dabei bin ich darüber gestolpert, dass diverse Zugriffsmethoden jeweils eine const und nonconst-Methode haben.<br />
Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class vector
{
private:
  T* data;
  typedef T* pointer;
  typedef T const* const_pointer;
  //etc.

  pointer ptrbegin() {return data;}
  const_pointer ptrbegin() const {return data;}
  pointer ptrend() {return ptrbegin() + size();}                          // + const
public:
  iterator begin() {return ptrbegin(); /*automatische konvertierung*/}    // + const
  iterator end() {return ptrend(); /*automatische konvertierung*/}        // + const
  /** weitere:
   * rbegin()
   * rend()
   * operator[]()
   * at()
   **/
};
</code></pre>
<p>All diese Methoden haben bis auf ein const_ vorne am Rückgabetyp und den const-specifier für die Methode die selbe Signatur und die selbe Implementierung für die const- und nonconst-Version.</p>
<p>Das selbe Problem wird hier auch angesprochen: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-241290.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-241290.html</a><br />
Sieht jemand ne Lösung wie das zu meisten ist? (durch das const_ am Rückgabetyp wird wohl nur ein Makro in Frage kommen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712609</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 19 May 2009 07:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Code-Duplizierung vermeiden für const- und nonconst- Accessor on Tue, 19 May 2009 07:59:31 GMT]]></title><description><![CDATA[<p>willst du</p>
<pre><code class="language-cpp">const iterator begin() const;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">const_iterator begin() const;
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712614</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 19 May 2009 07:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Code-Duplizierung vermeiden für const- und nonconst- Accessor on Tue, 19 May 2009 08:06:37 GMT]]></title><description><![CDATA[<p>Wie man aus dem ersten Beispiel mit pointer und const_pointer, der Spezifikation von std::vector und meinem Kommentar bezüglich &quot;wegen const_ müsste es wohl ein Makro sein&quot; und der Tatsache, dass ein const_iterator was völlig anderes als ein const iterator ist, entnehmen kann, zweiteres.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712617</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 19 May 2009 08:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Code-Duplizierung vermeiden für const- und nonconst- Accessor on Tue, 19 May 2009 13:41:42 GMT]]></title><description><![CDATA[<p>Ich denke die beste Lösung ist dieses Problem nicht zu lösen, und die const Overloads einfach nochmal extra hinzuschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712804</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 19 May 2009 13:41:42 GMT</pubDate></item></channel></rss>