<?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[Automatische Konversion zwischen zwei Typen]]></title><description><![CDATA[<p>Wir wollen im Zuge eines größeren Redesigns unsere Stringklasse austauschen.<br />
Es gibt aber auch noch alte Oberflächenteile, die durch dieses Redesign nicht umgestellt werden und weiterhin die alte Stringklasse benützen.</p>
<p>Jetzt ergibt sich also das Problem, das im alten Oberflächencode die alte Stringklasse verwendet wird und bei einem Aufruf der Businesslogic diese aber die neue Klasse erwartet.</p>
<p>Nun sind wir auf der Suche nach einer Möglichkeit, einen Operator zur Verfügung zu stellen, die diese Konvertierung automatisch durchführt.</p>
<p>Noch zur Veranschaulichung hier das ganze in Codeform:</p>
<p>class OldString<br />
{..<br />
};</p>
<p>class NewString<br />
{..<br />
};</p>
<p>// Umgestellte Businesslogic<br />
class MyObject<br />
{<br />
...<br />
void SetName (const NewString&amp; name);<br />
...<br />
};</p>
<p>// Alter Oberflächencode<br />
class MyGui<br />
{<br />
...<br />
void ChangeName();<br />
};</p>
<p>void MyGui::ChangeName()<br />
{<br />
OldString name = ReadName(...)</p>
<p>MyObject ob;</p>
<p>// OldString wird übergeben, NewString wird aber erwartet<br />
ob.SetName (name);<br />
}</p>
<p>Das Ziel ist, dass der alte Oberflächecode ohne eine Änderung weiterhin funktioniert.<br />
Natürlich gäbe es theoretisch die Möglichkeit, in NewString einen Konstruktor zur Verfügung zu stellen, der OldString erwartet - dies geht aber nicht, da es keine selbstgeschriebene Klasse ist (sonst wärs ja zu einfach ;)).</p>
<p>Hat hier vielleicht jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175006/automatische-konversion-zwischen-zwei-typen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 00:33:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175006.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Mar 2007 10:21:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Automatische Konversion zwischen zwei Typen on Tue, 06 Mar 2007 10:21:16 GMT]]></title><description><![CDATA[<p>Wir wollen im Zuge eines größeren Redesigns unsere Stringklasse austauschen.<br />
Es gibt aber auch noch alte Oberflächenteile, die durch dieses Redesign nicht umgestellt werden und weiterhin die alte Stringklasse benützen.</p>
<p>Jetzt ergibt sich also das Problem, das im alten Oberflächencode die alte Stringklasse verwendet wird und bei einem Aufruf der Businesslogic diese aber die neue Klasse erwartet.</p>
<p>Nun sind wir auf der Suche nach einer Möglichkeit, einen Operator zur Verfügung zu stellen, die diese Konvertierung automatisch durchführt.</p>
<p>Noch zur Veranschaulichung hier das ganze in Codeform:</p>
<p>class OldString<br />
{..<br />
};</p>
<p>class NewString<br />
{..<br />
};</p>
<p>// Umgestellte Businesslogic<br />
class MyObject<br />
{<br />
...<br />
void SetName (const NewString&amp; name);<br />
...<br />
};</p>
<p>// Alter Oberflächencode<br />
class MyGui<br />
{<br />
...<br />
void ChangeName();<br />
};</p>
<p>void MyGui::ChangeName()<br />
{<br />
OldString name = ReadName(...)</p>
<p>MyObject ob;</p>
<p>// OldString wird übergeben, NewString wird aber erwartet<br />
ob.SetName (name);<br />
}</p>
<p>Das Ziel ist, dass der alte Oberflächecode ohne eine Änderung weiterhin funktioniert.<br />
Natürlich gäbe es theoretisch die Möglichkeit, in NewString einen Konstruktor zur Verfügung zu stellen, der OldString erwartet - dies geht aber nicht, da es keine selbstgeschriebene Klasse ist (sonst wärs ja zu einfach ;)).</p>
<p>Hat hier vielleicht jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240112</guid><dc:creator><![CDATA[Christa]]></dc:creator><pubDate>Tue, 06 Mar 2007 10:21:16 GMT</pubDate></item><item><title><![CDATA[Reply to Automatische Konversion zwischen zwei Typen on Tue, 06 Mar 2007 10:32:44 GMT]]></title><description><![CDATA[<p>Du hast zwei prinzipielle Möglichkeiten, die Typumwandlung zu bewerkstelligen - in der Ursprungsklasse oder in der Zielklasse. Wenn du an beiden nichts ändern kannst, bleibt dir nur eine explizite Konvertierungsfunktion:</p>
<pre><code class="language-cpp">//a: in der Zielklasse:
class src;

class tgt
{
public:
  tgt(const src&amp; obj);//Umwandlung per Ctor
};

//b: in der Quellklasse
class tgt;

class src
{
public:
  operator tgt();//Umwandlung per Cast-Operator
};

//c: explizite Umwandlung
class src;
class tgt;

tgt as_tgt(const src&amp; obj);//explizite Umwandlung
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1240123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240123</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Mar 2007 10:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to Automatische Konversion zwischen zwei Typen on Tue, 06 Mar 2007 10:41:15 GMT]]></title><description><![CDATA[<p>Wie wäre es mit einer Klasse, die ein NewString-Objekt unterhält und die Funktionsaufrufe an dieses weiter delegiert. Der Konstruktor kann dann ein Objekt von dem alten String übernehmen. Wenn dann jeweils die Rohdaten extrahiert werden können und in den anderen String verschoben werden, wäre euer Problem gelöst. <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>Beispiel:</p>
<pre><code class="language-cpp">class StringWrapper
{
    NewString localString_;

public:
    StringWrapper(const OldStrong&amp; rhs)
    : localString_(rhs.c_string)
    { }

    //Funktionen die gebraucht werden und delegiert werden sollen
    std::size_t inline size() const
    {
        return localString.size();
    }
};
</code></pre>
<p>Sowas in der Richtung.</p>
<p>PS: &quot;Konvertierung&quot; :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240125</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Tue, 06 Mar 2007 10:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Automatische Konversion zwischen zwei Typen on Tue, 06 Mar 2007 11:05:11 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten!</p>
<p>Da haben wir gleich zwei Lösungsansätze zu überlegen <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>
<p>*g* &quot;Konversion&quot; -- tja das passiert, wenn man einfach von Englisch auf Deutsch &quot;konvertiert&quot; <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1240144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240144</guid><dc:creator><![CDATA[Christa]]></dc:creator><pubDate>Tue, 06 Mar 2007 11:05:11 GMT</pubDate></item></channel></rss>