<?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[Operatoren]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgendes Problem. Ich habe eine (okay sind mehrere) Klassen mit denen ich die Strukturen der WinAPI etwas &quot;erweitern&quot; wollte. Da ich jedoch auch Platformübergreifend bleiben will, leite ich diese nicht von den WinAPI Strukturen ab.</p>
<p>Zum setzen (eher konvertieren der Struktur in die für die Windowsfunktionen verständliche Strukturen) habe ich einen Operator geschrieben, das geht auch mehr als nur wunderbar!</p>
<p>Jedoch benötige ich nun einen Operator zum holen der Daten. Doch dort weiß ich nicht mehr weiter. Zur not geh ich da mit einem reinterpret_cast ran, doch das ist nicht das wahre <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="😞"
    /></p>
<p>Hat jemand eine Idee wie ich das machen kann ohne die Klasse zu vererben von den WinAPO Grunstrukturen?</p>
<p>Hier schon mal was code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

class point
{
public:
    point (long x, long y) : x(x), y(y) {}

        // Operator zum Setzen auf POINT
    inline operator POINT (void)
    {
        POINT pt = {x, y};
        return pt;
    }

    long x, y;
};

int main (void)
{
    point pt (0,0);

    GetCursorPos (reinterpret_cast&lt;POINT*&gt;(&amp;pt)); // Kann man hierfür keinen Operator schreiben, wenn ja? WIE?

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/135785/operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 03:27:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135785.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Feb 2006 23:31:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatoren on Sat, 04 Feb 2006 23:31:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgendes Problem. Ich habe eine (okay sind mehrere) Klassen mit denen ich die Strukturen der WinAPI etwas &quot;erweitern&quot; wollte. Da ich jedoch auch Platformübergreifend bleiben will, leite ich diese nicht von den WinAPI Strukturen ab.</p>
<p>Zum setzen (eher konvertieren der Struktur in die für die Windowsfunktionen verständliche Strukturen) habe ich einen Operator geschrieben, das geht auch mehr als nur wunderbar!</p>
<p>Jedoch benötige ich nun einen Operator zum holen der Daten. Doch dort weiß ich nicht mehr weiter. Zur not geh ich da mit einem reinterpret_cast ran, doch das ist nicht das wahre <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="😞"
    /></p>
<p>Hat jemand eine Idee wie ich das machen kann ohne die Klasse zu vererben von den WinAPO Grunstrukturen?</p>
<p>Hier schon mal was code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

class point
{
public:
    point (long x, long y) : x(x), y(y) {}

        // Operator zum Setzen auf POINT
    inline operator POINT (void)
    {
        POINT pt = {x, y};
        return pt;
    }

    long x, y;
};

int main (void)
{
    point pt (0,0);

    GetCursorPos (reinterpret_cast&lt;POINT*&gt;(&amp;pt)); // Kann man hierfür keinen Operator schreiben, wenn ja? WIE?

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/986162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986162</guid><dc:creator><![CDATA[&#x27;#&#x27;]]></dc:creator><pubDate>Sat, 04 Feb 2006 23:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:02:53 GMT]]></title><description><![CDATA[<p>So hab ich das schlüsselwort operator noch nie benutzt.<br />
So weit ich weis ist das nur zum überladen bereits vorhandener operatoren.</p>
<p>Schau lieber noch mal im google ob es sowas überhaupt gibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986284</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:02:53 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:11:32 GMT]]></title><description><![CDATA[<p><a href="http://Storm.Xapek.de" rel="nofollow">Storm.Xapek.de</a> schrieb:</p>
<blockquote>
<p>So hab ich das schlüsselwort operator noch nie benutzt.<br />
So weit ich weis ist das nur zum überladen bereits vorhandener operatoren.</p>
<p>Schau lieber noch mal im google ob es sowas überhaupt gibt</p>
</blockquote>
<p>Man kann mittels operator implizite Typkonvertierung anbieten, wie im Code oben demonstriert, allerdings wird von deren Verwendung in den meisten Fällen abgeraten, da sie nicht unerhebliche Probleme mit sich bringen.</p>
<p>@'#': Den reinterpret_cast kannst du im Prinzip in einen ähnlichen Operator auslagern:</p>
<pre><code class="language-cpp">operator POINT* (void)
{
  return (reinterpret_cast &lt;POINT*&gt; (this));
}
</code></pre>
<p>Allerdings offenbart sich mir noch nicht der Sinn deines Anliegens. Ein reinterpret_cast ist jedenfalls nicht die Lösung für Plattformunabhängigkeit, auch wenn es in diesem Fall problemlos funktionieren dürfte. In den meisten anderen Fällen sollten solche Klassen, die einfach Windows-Strukturen wrappen, nicht wesentlich zur Plattformunabhängigkeit beitragen, denn ich möchte mal bezweifeln, daß es zu allen WinAPI-Strukturen unter anderen Betriebssysteme gleichwertige Pendants gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986293</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:32:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8276">@audacia</a><br />
das mit der platformunabhängigkeit lassen wir mal links liegen, mir geht es nur darum ob sowas geht ohne einen cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986312</guid><dc:creator><![CDATA[&#x27;#&#x27;]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:41:46 GMT]]></title><description><![CDATA[<p>'#' schrieb:</p>
<blockquote>
<p>das mit der platformunabhängigkeit lassen wir mal links liegen, mir geht es nur darum ob sowas geht ohne einen cast.</p>
</blockquote>
<p>Das geht, wenn du in deiner Klasse eine Variable des Typs POINT deklarierst, auf die du dann einen Zeiger zurückgeben kannst:</p>
<pre><code class="language-cpp">class point
{
    POINT p;
public:
    point (long x, long y) : x(x), y(y) {}

    operator POINT* (void)
    {
        return &amp;p;
    }
};
</code></pre>
<p>Allerdings ist die Lösung nicht sehr sauber, da du 1. dem Benutzer deiner Klasse direkten Zugriff auf klasseninterne Daten gewährst und 2. eine implizite Typkonvertierung verwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986326</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:59:30 GMT]]></title><description><![CDATA[<p>Schreib lieber einen Wrapper um die GetCursorPos Funktion.</p>
<pre><code class="language-cpp">Point MyGetCursorPos()
{
    POINT point;
    GetCursorPos(&amp;point);
    return Point(point);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/986340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986340</guid><dc:creator><![CDATA[p]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 11:59:41 GMT]]></title><description><![CDATA[<p>ergo gibt es keine sauberere lösung als ein reinterpret_cast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986341</guid><dc:creator><![CDATA[&#x27;#&#x27;]]></dc:creator><pubDate>Sun, 05 Feb 2006 11:59:41 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 12:00:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15749">@p</a><br />
mir geht es um das designtechnische lösungen und nicht um solche lösungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986343</guid><dc:creator><![CDATA[&#x27;#&#x27;]]></dc:creator><pubDate>Sun, 05 Feb 2006 12:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 17:02:52 GMT]]></title><description><![CDATA[<p>'#' schrieb:</p>
<blockquote>
<p>ergo gibt es keine sauberere lösung als ein reinterpret_cast?</p>
</blockquote>
<p>Ich hab doch eine gepostet!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/986655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/986655</guid><dc:creator><![CDATA[audacia|off]]></dc:creator><pubDate>Sun, 05 Feb 2006 17:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Sun, 05 Feb 2006 23:33:32 GMT]]></title><description><![CDATA[<p>'#' schrieb:</p>
<blockquote>
<p>ergo gibt es keine sauberere lösung als ein reinterpret_cast?</p>
</blockquote>
<p>Naja, du könntest ja den unären op &amp; überladen. Bekommst dann damit aber kein point* mehr.<br />
Grundsätzlich ist es korrekt, dass dort ein Cast steht. Auch wenn dir das vielleicht nicht gefällt. POINT und point sind nunmal zwei unterschiedliche Typen. Deshalb verweisen POINT* und point* auch auf unterschiedliche Objekte. Implizite Umwandlungen führen bei solchen Sachen nicht selten zu unschönen Fallstricken und ist daher nicht zu empfehlen. Mach dir deshalb keine Gedanken, wie du den Cast wegbekommst, sondern versuche sinnvoll zu kapseln, damit du nicht immer den Cast schreben musst. Ein Beispiel wurde ja schon gepostet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/987001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/987001</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 05 Feb 2006 23:33:32 GMT</pubDate></item></channel></rss>