<?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[swap implementerungsfrage]]></title><description><![CDATA[<p>hallo</p>
<p>angenommen es existiert eine basisklasse b und eine abgeleitete klasse d (die von b öffentlich erbt). nun da in d eine menge daten sind, ich aber nicht auf das copy-and-swap-idiom verzichten möchte, implementiere ich meine eigene swap-funktionen. wie kann ich in einer swap-member-funktion die basisklassen swappen? gibt es dafür überhaupt eine schöne darstellung? oder muss man einen manuellen dreieckstausch mit slicing machen?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322229/swap-implementerungsfrage</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 10:30:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322229.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Dec 2013 22:57:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to swap implementerungsfrage on Wed, 11 Dec 2013 22:57:59 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>angenommen es existiert eine basisklasse b und eine abgeleitete klasse d (die von b öffentlich erbt). nun da in d eine menge daten sind, ich aber nicht auf das copy-and-swap-idiom verzichten möchte, implementiere ich meine eigene swap-funktionen. wie kann ich in einer swap-member-funktion die basisklassen swappen? gibt es dafür überhaupt eine schöne darstellung? oder muss man einen manuellen dreieckstausch mit slicing machen?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371255</guid><dc:creator><![CDATA[copyandswap]]></dc:creator><pubDate>Wed, 11 Dec 2013 22:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Wed, 11 Dec 2013 23:40:40 GMT]]></title><description><![CDATA[<pre><code>struct B {};
struct D : B
{
	void swap(D&amp; other)
	{
		std::swap( *static_cast&lt;B*&gt;(this), static_cast&lt;B&amp;&gt;(other) );
	}
};
</code></pre>
<p>Das geht syntaktisch sicher schöner, aber auf die Schnelle will mir nichts einfallen.<br />
(Übrigens: Wieso keine <code>swap</code> -Memberfunktion in der Basisklasse?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371260</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 11 Dec 2013 23:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Thu, 12 Dec 2013 01:47:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::swap&lt;B&gt;(*this, other);
</code></pre>
<p>sollte gehen, denke ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371266</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 12 Dec 2013 01:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Thu, 12 Dec 2013 01:48:54 GMT]]></title><description><![CDATA[<p>Nachtrag: Aber vermutlich suchtest du eher</p>
<pre><code class="language-cpp">struct B {
  virtual void swap(B &amp;other) { ... }
};

struct D : B
{
    void swap(D&amp; other)
    {
        B::swap(other);
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2371267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371267</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 12 Dec 2013 01:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Thu, 12 Dec 2013 10:00:12 GMT]]></title><description><![CDATA[<p>@seldon: Das ist doch Unfug! Das <code>swap</code> in D hat doch gar nicht dieselbe Signatur, und C++ unterstützt keine kovarianten Funktionsparameter!</p>
<p>Edit: Oder du machst das <code>swap virtual</code> , da in abgeleiteten Klassen das <code>swap</code> mit der Basisklasse redefiniert werden könnte. Fände ich aber merkwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371304</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 12 Dec 2013 10:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Thu, 12 Dec 2013 10:10:37 GMT]]></title><description><![CDATA[<p>Das Livkovsche Substitutionsprinzip sagt Nein.</p>
<pre><code>struct B {
  virtual void swap(B &amp;other) { ... }
};

struct D : B
{
///lalalala
};

struct E : B
{
///lalalala
};

//...
E e;
D d;
e.swap(d);//???
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2371310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371310</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 12 Dec 2013 10:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to swap implementerungsfrage on Thu, 12 Dec 2013 10:12:11 GMT]]></title><description><![CDATA[<p>die basisklasse habe nicht ich geschrieben sondern der anbieter einer library und der hat leider nicht so viel wert darauf gelegt. und ich kann das natürlich auch nicht ändern. ich werde heute abend mal den ersten und den zweiten vorschlag ausprobieren und mich dann nochmals melden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371312</guid><dc:creator><![CDATA[copyandswap]]></dc:creator><pubDate>Thu, 12 Dec 2013 10:12:11 GMT</pubDate></item></channel></rss>