<?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[Wrapper Class]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>Habe ein kleines Problem mit abgeleiteten Klassen und einer Wrapper Klasse. Hier ist was ich momentan mache:</p>
<p>class Base<br />
{<br />
doFunc1();<br />
virtual doFunc2();<br />
}</p>
<p>class Der1 : public Base<br />
{<br />
doFunc2();<br />
}<br />
class Der2 : public Base<br />
{<br />
doFunc2();<br />
}</p>
<p>class Wrap<br />
{<br />
Der1 *d1;<br />
Der2 *d2;<br />
doFunc1();<br />
doFunc2();<br />
}</p>
<p>Wrap::doFunc1()<br />
{<br />
if(somecondition)<br />
d1-&gt;doFunc1();<br />
else<br />
d2-&gt;doFunc1();<br />
}</p>
<p>Wrap::doFunc2()<br />
{<br />
if(somecondition)<br />
d1-&gt;doFunc2();<br />
else<br />
d2-&gt;doFunc2();<br />
}</p>
<p>Das Hauptprogram ruft auf:<br />
Wrap::doFunc1();</p>
<p>Die Wrapper functionen sollten durch pointer ersetzt werden, in etwa so:<br />
class Wrap<br />
{<br />
Der1 *d1;<br />
Der2 *d2;<br />
(*doFunc1)();<br />
(*doFunc2)();<br />
}</p>
<p>Wrap::Wrap<br />
{<br />
if(somecondition)<br />
this-&gt;doFunc1 = &amp;Der1::doFunc1;// causes C2440<br />
this-&gt;doFunc2 = &amp;Der1::doFunc2;// causes C2440<br />
else<br />
this-&gt;doFunc1 = &amp;Der1::doFunc1;// causes C2440<br />
this-&gt;doFunc2 = &amp;Der1::doFunc2;// causes C2440<br />
}</p>
<p>Im Hauptprogram sollte es dann so aussehen:<br />
Wrap::doFunc1();</p>
<p>Die Zeile this-&gt;doFunc1 = ... verursacht C2440: type cast: cannot convert from (__thiscall Der1::<em>)() to (__cdecl</em>)().</p>
<p>Mir ist bewusst, dass Klassenmember sich von normalen c-funktionen unterscheiden, da dies den C2440 verursacht, aber evtl. kennt einer einen Trick, wie ich es zum Laufen bringe.<br />
Irgendwelche Ideen?</p>
<p>Gruss,<br />
frankoni22000</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234051/wrapper-class</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 13:57:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234051.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Feb 2009 13:39:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wrapper Class on Thu, 12 Feb 2009 13:39:00 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>Habe ein kleines Problem mit abgeleiteten Klassen und einer Wrapper Klasse. Hier ist was ich momentan mache:</p>
<p>class Base<br />
{<br />
doFunc1();<br />
virtual doFunc2();<br />
}</p>
<p>class Der1 : public Base<br />
{<br />
doFunc2();<br />
}<br />
class Der2 : public Base<br />
{<br />
doFunc2();<br />
}</p>
<p>class Wrap<br />
{<br />
Der1 *d1;<br />
Der2 *d2;<br />
doFunc1();<br />
doFunc2();<br />
}</p>
<p>Wrap::doFunc1()<br />
{<br />
if(somecondition)<br />
d1-&gt;doFunc1();<br />
else<br />
d2-&gt;doFunc1();<br />
}</p>
<p>Wrap::doFunc2()<br />
{<br />
if(somecondition)<br />
d1-&gt;doFunc2();<br />
else<br />
d2-&gt;doFunc2();<br />
}</p>
<p>Das Hauptprogram ruft auf:<br />
Wrap::doFunc1();</p>
<p>Die Wrapper functionen sollten durch pointer ersetzt werden, in etwa so:<br />
class Wrap<br />
{<br />
Der1 *d1;<br />
Der2 *d2;<br />
(*doFunc1)();<br />
(*doFunc2)();<br />
}</p>
<p>Wrap::Wrap<br />
{<br />
if(somecondition)<br />
this-&gt;doFunc1 = &amp;Der1::doFunc1;// causes C2440<br />
this-&gt;doFunc2 = &amp;Der1::doFunc2;// causes C2440<br />
else<br />
this-&gt;doFunc1 = &amp;Der1::doFunc1;// causes C2440<br />
this-&gt;doFunc2 = &amp;Der1::doFunc2;// causes C2440<br />
}</p>
<p>Im Hauptprogram sollte es dann so aussehen:<br />
Wrap::doFunc1();</p>
<p>Die Zeile this-&gt;doFunc1 = ... verursacht C2440: type cast: cannot convert from (__thiscall Der1::<em>)() to (__cdecl</em>)().</p>
<p>Mir ist bewusst, dass Klassenmember sich von normalen c-funktionen unterscheiden, da dies den C2440 verursacht, aber evtl. kennt einer einen Trick, wie ich es zum Laufen bringe.<br />
Irgendwelche Ideen?</p>
<p>Gruss,<br />
frankoni22000</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662498</guid><dc:creator><![CDATA[frankoni22000]]></dc:creator><pubDate>Thu, 12 Feb 2009 13:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Thu, 12 Feb 2009 13:41:11 GMT]]></title><description><![CDATA[<p>Die Syntax von Memberfunktionszeigern sieht anders aus als die von einfachen Funktionszeigern. Schau dir mal diesen <a href="http://www.newty.de/fpt/index.html" rel="nofollow">Link</a> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662502</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 12 Feb 2009 13:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Thu, 12 Feb 2009 14:05:45 GMT]]></title><description><![CDATA[<p>Die Seite ist mir schon bekannt, bringt aber leider keine Lösung meines problems. Habe bereits versucht mit templates zu arbeiten, komme aber nicht weiter.</p>
<p>Trotzdem, danke für die Antwort.</p>
<p><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/1662524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662524</guid><dc:creator><![CDATA[frankoni22000]]></dc:creator><pubDate>Thu, 12 Feb 2009 14:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Thu, 12 Feb 2009 15:28:32 GMT]]></title><description><![CDATA[<p>Du sagst, was nicht geht, aber nicht genau, was Du eigentlich machen willst.<br />
Kannst Du vielleicht mal erklären, was das Ziel der ganzen Sache ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662622</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 12 Feb 2009 15:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Fri, 13 Feb 2009 07:08:24 GMT]]></title><description><![CDATA[<p>Nun, in Worte zu fassen ist etwas schwierig, aber ich will es mal versuchen. Ich habe eine Basisklasse, von der drei weitere Klassen abgeleitet sind, welche Teile der Basisklasse überschreiben. Um im Hauptprogramm nicht alle drei Klassen als Objekte zu führen habe ich wiederum die drei abgeleiteten Klassen in einer Wrapper-Klasse zusammengefügt. Was mir an der Wrapper-Klasse aber nicht gefällt, ist die Tatsache, dass ich dort abhängig davon, welche der drei Klassen benutzt wird, eine Fallunterscheidung (if-else) machen muss, um die richtige abgeleitete Klasse aufzurufen. Jetzt dachte ich mir ich lege in der Wrapper-Klasse Funktionszeiger an, welche ich zur Laufzeit initialisiere und auf die benutzte Klasse verweisen lasse. Die Funktionszeiger werden vom Kompiler als __cdecl angelegt. Leider schmeisst ich der Visual Studio Kompiler mit C2440 raus, da ein Funktionscast von __thiscall nach __cdecl nicht erlaubt ist. Was ich schon gesehen habe ist, dass klassenintern Funktionszeiger erlaubt sind.</p>
<p>Wahrscheinlich funzt es gar nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> und ich muss bei der Fallunterscheidung bleiben...</p>
<p><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="🙂"
    /> Vielen Dank für eure Antworten!<br />
Frankoni</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662931</guid><dc:creator><![CDATA[frankoni22000]]></dc:creator><pubDate>Fri, 13 Feb 2009 07:08:24 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Fri, 13 Feb 2009 11:34:13 GMT]]></title><description><![CDATA[<p>In diesem Fall kannst du die Wrapperklasse ruhig vergessen, das geht einfacher.</p>
<p>bsp;</p>
<pre><code class="language-cpp">std::vector&lt;Base*&gt; vec;

vec.push_back(new Der1);
vec.push_back(new Der2);

vec[0]-&gt;func2(); // führe func2 von Der1 aus
vec[1]-&gt;func2(); // führe func2 von Der2 aus
</code></pre>
<p>Das ganze nennt sich polymorphie, danach solltest du mal googlen.<br />
Oder in deinem Buch/Tutorial nachschauen, sollte eigentlich schon drangekommen sein wenn man vererbung hat.</p>
<p>// EDIT:<br />
Das mit dem std::vector war jetzt natürlich nur ein Beispiel, kansnt deine Objecte natürlich verwalten wie du möchtest, hat nichts mit polymorphie zu tun.<br />
Machst du das mti der Wrapperklasse hätte auch das virtual in base keinen Sinn, was mich wieder dazu führt das du das ganze schon längst gehabt haben müsstest in deinem tutorial / buch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663069</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Fri, 13 Feb 2009 11:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper Class on Fri, 13 Feb 2009 13:06:14 GMT]]></title><description><![CDATA[<p>Danke, werd ich mal nachlesen. Buch und Vorlesung...mmhm, bin leider nicht aus der Informatikerecke und zu meiner Zeit haben wir noch Assembler in den Z80 geklopft ;-). Soll jetzt keine Entschuldigung meines Nichtwissens sein, sondern nur eine Erklärung, warum ich davon keine Ahnung habe.</p>
<p>vielen Dank für die Info.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663155</guid><dc:creator><![CDATA[frankoni22000]]></dc:creator><pubDate>Fri, 13 Feb 2009 13:06:14 GMT</pubDate></item></channel></rss>