<?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[const ref auf ptr]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine Frage aus Interesse:<br />
Ich habe eine Containerklasse, die das Sortieren durch Übergabe eines &quot;Predicate&quot;/Funktors unterstützt. Dieses Predicate muss von einer abstrakten Predicate-Klasse abgeleitet werden, die den operator() folgendermaßen deklariert:</p>
<pre><code class="language-cpp">virtual bool operator() (const T&amp; t1, const T&amp; t2) const = 0;
</code></pre>
<p>Der Container, den ich sortieren möchte, enthält nun Zeiger, d.h. der Template-Parameter ist vom Typ MyClass*.</p>
<p>Mit Hilfe eines typedef lässt sich alles recht einfach bewerkstelligen:</p>
<pre><code class="language-cpp">typedef MyClass* myPtr;
virtual bool operator()(const myPtr&amp; p1, const myPtr&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>Folgendes müsste aus meiner Sicht ebenfalls funktionieren</p>
<pre><code class="language-cpp">virtual bool operator()(MyClass* const&amp; p1, MyClass* const&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>weil</p>
<pre><code class="language-cpp">const MyClass&amp; obj
</code></pre>
<p>gleichwertig ist zu</p>
<pre><code class="language-cpp">MyClass const&amp; obj
</code></pre>
<p>Das ist richtig, oder? (Der Compiler hat jedenfalls nichts zu meckern.)</p>
<p>Allerdings bekomme ich es auch durch Klammersetzung nicht hin, die (mir) vertraute Schreibweise zu verwenden, ohne ein typedef zu benutzen. Also etwas in dieser Art:</p>
<pre><code class="language-cpp">virtual bool operator()(const MyClass*&amp; p1, const MyClass*&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>In dieser Form erkennt der Compiler das nicht als überschriebene Version der Basisklasse an.<br />
Muss ich tatsächlich auf eine der beiden erstgenannten Varianten zurückgreifen?</p>
<p>Wie gesagt, das ist nur eine technische Frage aus Interesse.<br />
Danke schonmal vorab!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304065/const-ref-auf-ptr</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 01:52:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304065.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 May 2012 09:21:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const ref auf ptr on Tue, 29 May 2012 09:21:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine Frage aus Interesse:<br />
Ich habe eine Containerklasse, die das Sortieren durch Übergabe eines &quot;Predicate&quot;/Funktors unterstützt. Dieses Predicate muss von einer abstrakten Predicate-Klasse abgeleitet werden, die den operator() folgendermaßen deklariert:</p>
<pre><code class="language-cpp">virtual bool operator() (const T&amp; t1, const T&amp; t2) const = 0;
</code></pre>
<p>Der Container, den ich sortieren möchte, enthält nun Zeiger, d.h. der Template-Parameter ist vom Typ MyClass*.</p>
<p>Mit Hilfe eines typedef lässt sich alles recht einfach bewerkstelligen:</p>
<pre><code class="language-cpp">typedef MyClass* myPtr;
virtual bool operator()(const myPtr&amp; p1, const myPtr&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>Folgendes müsste aus meiner Sicht ebenfalls funktionieren</p>
<pre><code class="language-cpp">virtual bool operator()(MyClass* const&amp; p1, MyClass* const&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>weil</p>
<pre><code class="language-cpp">const MyClass&amp; obj
</code></pre>
<p>gleichwertig ist zu</p>
<pre><code class="language-cpp">MyClass const&amp; obj
</code></pre>
<p>Das ist richtig, oder? (Der Compiler hat jedenfalls nichts zu meckern.)</p>
<p>Allerdings bekomme ich es auch durch Klammersetzung nicht hin, die (mir) vertraute Schreibweise zu verwenden, ohne ein typedef zu benutzen. Also etwas in dieser Art:</p>
<pre><code class="language-cpp">virtual bool operator()(const MyClass*&amp; p1, const MyClass*&amp; p2) const
{
    // Implementation
}
</code></pre>
<p>In dieser Form erkennt der Compiler das nicht als überschriebene Version der Basisklasse an.<br />
Muss ich tatsächlich auf eine der beiden erstgenannten Varianten zurückgreifen?</p>
<p>Wie gesagt, das ist nur eine technische Frage aus Interesse.<br />
Danke schonmal vorab!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216613</guid><dc:creator><![CDATA[refptr]]></dc:creator><pubDate>Tue, 29 May 2012 09:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to const ref auf ptr on Tue, 29 May 2012 09:30:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Muss ich tatsächlich auf eine der beiden erstgenannten Varianten zurückgreifen?</p>
</blockquote>
<p>Ja. <code>const</code> bezieht sich normalerweise auf das, was direkt links davon steht, deshalb schreibst du <code>Foo * const &amp;</code> für eine Referenz auf einen konstanten Zeiger auf Foo. Nur wenn das <code>const</code> ganz links steht, bezieht es sich auf das unmittelbar rechts davon. Das dürfte hauptsächlich historische Gründe haben, es ist IMO guter Stil, diese Form, die du als &quot;vertraut&quot; bezeichnest, überhaupt nicht zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216616</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 29 May 2012 09:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to const ref auf ptr on Tue, 29 May 2012 09:53:11 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnelle Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216628</guid><dc:creator><![CDATA[refptr]]></dc:creator><pubDate>Tue, 29 May 2012 09:53:11 GMT</pubDate></item><item><title><![CDATA[Reply to const ref auf ptr on Tue, 29 May 2012 11:10:29 GMT]]></title><description><![CDATA[<p>refptr schrieb:</p>
<blockquote>
<pre><code class="language-cpp">virtual bool operator()(MyClass* const&amp; p1, MyClass* const&amp; p2) const
{
    // Implementation
}
</code></pre>
</blockquote>
<p>Referenz auf Konstanten Zeiger auf ein Objekt vom Typ MyClass.</p>
<p>refptr schrieb:</p>
<blockquote>
<pre><code class="language-cpp">virtual bool operator()(const MyClass*&amp; p1, const MyClass*&amp; p2) const
{
    // Implementation
}
</code></pre>
</blockquote>
<p>Referenz auf Zeiger auf ein konstantes Objekt vom Typ MyClass. Der Zeiger (also T) ist nicht konstant ;), sondern nur sein Pointee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216649</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 29 May 2012 11:10:29 GMT</pubDate></item></channel></rss>