<?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[Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot;]]></title><description><![CDATA[<p>Guten (Morgen/Tag/Abend),</p>
<p>welche Möglichkeiten gibt es, von einem in einem benutzerdefinierten Typ abgelegten Member zurück auf die &quot;Hostklasse&quot; zuzugreifen? Das einzige, was mir dazu einfällt sind Unions:</p>
<pre><code class="language-cpp">union U;

struct C {
    U&amp; get()
    { return *reinterpret_cast&lt;U*&gt;(this); }
};

union U {
    C c;
};
</code></pre>
<p>Das sollte funktionieren, solange C leer ist. Gibt es noch andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294570/rückgriff-von-einem-member-auf-die-quot-hostklasse-quot</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 20:48:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294570.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Oct 2011 12:48:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 12:48:54 GMT]]></title><description><![CDATA[<p>Guten (Morgen/Tag/Abend),</p>
<p>welche Möglichkeiten gibt es, von einem in einem benutzerdefinierten Typ abgelegten Member zurück auf die &quot;Hostklasse&quot; zuzugreifen? Das einzige, was mir dazu einfällt sind Unions:</p>
<pre><code class="language-cpp">union U;

struct C {
    U&amp; get()
    { return *reinterpret_cast&lt;U*&gt;(this); }
};

union U {
    C c;
};
</code></pre>
<p>Das sollte funktionieren, solange C leer ist. Gibt es noch andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136620</guid><dc:creator><![CDATA[Rückgriff]]></dc:creator><pubDate>Thu, 27 Oct 2011 12:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:12:33 GMT]]></title><description><![CDATA[<p>Erklär noch mal, was Du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136644</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:17:48 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Erklär noch mal, was Du willst.</p>
</blockquote>
<p>+1. Erklär auch die Wörter &quot;ablegen&quot; und &quot;Hostklasse&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136649</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:22:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
class Host;

template &lt;typename T&gt;
class Member {
    Host&lt;T&gt;&amp; myHost()
    { /* Wie soll das gehen? */ }

    // Mit den Daten arbeiten
    void foo()
    { myHost().x += 10; }
};

// Die &quot;Hostklasse&quot;
template &lt;typename T&gt;
class Host {
    Member&lt;T&gt; m;

    int x;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2136654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136654</guid><dc:creator><![CDATA[Rückgriff]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:29:17 GMT]]></title><description><![CDATA[<p>Am besten gar nicht, aber wenn es sein muss vllt. so:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Host;

template &lt;typename T&gt;
class Member {
    Member(Host&lt;T&gt; &amp; host) : m_host(host){}
    Host&lt;T&gt;&amp; myHost()
    { return m_host; }

    // Mit den Daten arbeiten
    void foo()
    { myHost().x += 10; }
    Host&lt;T&gt; &amp; m_host;
};

// Die &quot;Hostklasse&quot;
template &lt;typename T&gt;
class Host {
    Member&lt;T&gt; m;
    Host() : m(*this){}
    int x;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2136657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136657</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:29:17 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:32:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt; class Foo;

template &lt;typename T&gt; class Bar 
{
  Foo&lt;T&gt;&amp; myHost()
  { 
    static Foo&lt;T&gt; foo;
    return foo;
  }

public:  
  void foo()
  { myHost().foo = 10; }
};

template &lt;typename T&gt; class Foo 
{
public:
  T foo;
};

int main()
{
  Bar&lt;int&gt; bar;
  bar.foo();
}
</code></pre>
<p>So gemeint? Du kannst dir hier zu nutze machen, dass das Template erst instanziert wird, wenn es benutzt wird. Und dann ist deine &quot;Hostklasse&quot; schon bekannt. Daher reicht die Vorwärtsdeklaration oben aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136658</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:32:31 GMT]]></title><description><![CDATA[<p>Rückgriff schrieb:</p>
<blockquote>
<p>Gibt es noch andere Möglichkeiten?</p>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/clibrary/cstddef/offsetof/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstddef/offsetof/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136659</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:32:31 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:52:10 GMT]]></title><description><![CDATA[<p>offsetof ist nur für POD-Typen definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136666</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgriff von einem Member auf die &amp;quot;Hostklasse&amp;quot; on Thu, 27 Oct 2011 13:53:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a>: Leider nimmt mir eine Referenz zu viel Speicher, aber an sich eine mögliche Lösung.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Welches ist da die Hostklasse?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Wenn du mir jetzt noch erklären kannst, wie ich dem Member klarmachen kann, welchen Offset er hat wäre das perfekt. Denn für offsetof muss das Member bereits definiert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136667</guid><dc:creator><![CDATA[Rückgriff]]></dc:creator><pubDate>Thu, 27 Oct 2011 13:53:34 GMT</pubDate></item></channel></rss>