<?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[Typename von this]]></title><description><![CDATA[<p>Hallo,<br />
ich probiere gerade den Typename einer anonymen Klasse zu bestimmen.</p>
<pre><code class="language-cpp">class Class {
    struct /* Anonym */ {
    };
};
</code></pre>
<p>Dazu dachte ich mir, könnte man den Typename von this bestimmen und dann den Pointer durch Type Traits wegpfuschen. Wie ist das möglich?</p>
<p>Danke <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/topic/292546/typename-von-this</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 01:09:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292546.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Sep 2011 14:35:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 14:35:25 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich probiere gerade den Typename einer anonymen Klasse zu bestimmen.</p>
<pre><code class="language-cpp">class Class {
    struct /* Anonym */ {
    };
};
</code></pre>
<p>Dazu dachte ich mir, könnte man den Typename von this bestimmen und dann den Pointer durch Type Traits wegpfuschen. Wie ist das möglich?</p>
<p>Danke <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/2118295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118295</guid><dc:creator><![CDATA[typename]]></dc:creator><pubDate>Mon, 12 Sep 2011 14:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 14:43:56 GMT]]></title><description><![CDATA[<p>typename schrieb:</p>
<blockquote>
<p>Dazu dachte ich mir, könnte man den Typename von this bestimmen und dann den Pointer durch Type Traits wegpfuschen. Wie ist das möglich?</p>
</blockquote>
<p>Mit C++03 Standard: nicht dass ich wüsste. Vielleicht unterstützt dein Compiler irgendwelche non-standard typeof's. Ggf. geht auch mit C++0x ein <code>decltype(*this)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118300</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 12 Sep 2011 14:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 14:55:19 GMT]]></title><description><![CDATA[<p>Jo, benutze GCC 4.6 und C++0x, auf die neuen &quot;Features&quot; kann man einfach nicht verzichten <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>Ich möchte einen Code, der sich an den Standart hält. Also keine Ausflüge.</p>
<p>typedef decltype(*this) ist eine gute Idee, führt aber zu:</p>
<blockquote>
<p>error: invalid use of ‘this’ at top level</p>
</blockquote>
<p>Generell beschwert sich der Compiler bei typedefs in Anonymous structs:</p>
<blockquote>
<p>error: ‘typedef std::string Class::&lt;anonymous struct&gt;::s’ invalid; an anonymous struct can only have non-static data members [-fpermissive]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2118307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118307</guid><dc:creator><![CDATA[typename]]></dc:creator><pubDate>Mon, 12 Sep 2011 14:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 15:05:21 GMT]]></title><description><![CDATA[<p>In der anonymen Klasse selbst gibts kein *this. Dass ein anonymes struct kein ytpedef enthalten darf, ist mir nicht bewusst. Hab im Standard auch nichts passendes dazu gefunden, wobei &quot;anonymous struct&quot;/&quot;anonymous class&quot; dort garnicht vorkommt, nur &quot;unnamed class&quot;, und da steht nur, das sie keine static data members enthalten dürfen. Ein typedef ist allerdings kein Datenmember.</p>
<p>Zeig mal etwas mehr Code, vor allem die Stelle, wo du den typedef verwenden willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118311</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 12 Sep 2011 15:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 15:43:03 GMT]]></title><description><![CDATA[<p>Ich möchte eine Klassentemplate bauen, die ermöglicht, dass auf Membervariablen direkt (z.B. durch den Zuweisungsoperator) zugegriffen werden kann. Als wenn sie public definiert wären. Trotzdem soll die &quot;Host-Klasse&quot; trotzdem Kontrolle über die Zugriffe haben, als wenn sie ihre eigenen get- und set-Methoden implementiert.</p>
<p>Die Membervariable und ein View als Member werden in einer Union gemeinsam definiert damit die Speicheradresse von dem View die gleiche wie von der Membervariable ist. Dadurch kann der View-Member sich selber in die Union, in der er definiert wurde, casten und dann auf die Membervariable zugreifen.</p>
<p>Ein paar Codezeilen sagen mehr als 1000 Worte:</p>
<pre><code class="language-cpp">template &lt;typename T, class Back, class Access&gt;
struct View {
    inline void operator=(const T&amp; other) {
        Access::access();
        reinterpret_cast&lt;Back*&gt;(this)-&gt;data_ = v;
    }

    // Alle möglichen anderen operatoren sowie T&amp; und const T&amp; überladen und access Methode aufrufen
};

class PrintOnAccess {
    void access() {
        std::cout &lt;&lt; &quot;Access!&quot; &lt;&lt; std::endl;
    }
};

class Class {
    union {
        //typedef decltype(*this) ThisType; // Wäre schön

        float data_;

        View v&lt;float, ThisType, PrintOnAccess&gt;;
    };
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2118333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118333</guid><dc:creator><![CDATA[typename]]></dc:creator><pubDate>Mon, 12 Sep 2011 15:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Typename von this on Mon, 12 Sep 2011 17:24:17 GMT]]></title><description><![CDATA[<p>typename schrieb:</p>
<blockquote>
<p>ich probiere gerade den Typename einer anonymen Klasse zu bestimmen.</p>
<pre><code class="language-cpp">class Class {
    struct /* Anonym */ {
    };
};
</code></pre>
</blockquote>
<p>Wozu braucht man das? Gib dem Ding doch einen Namen. Wenn Du nicht möchtest, dass der Name außerhalb der Klasse und Klassenfreunde verwendet wird, lässt Du einfach die Definition im privaten Bereich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118373</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 12 Sep 2011 17:24:17 GMT</pubDate></item></channel></rss>