<?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[Pointer-to-member]]></title><description><![CDATA[<p>Hallo liebe Forenmitglieder!</p>
<p>Ich hbe mal eine Frage:</p>
<pre><code class="language-cpp">class X{int a,b;};

int X::* p_pointer;
</code></pre>
<p>ist ja ein Pointer auf einen Member der Klasse X vom Typ int.</p>
<p>Warum aber gibt es das nicht auch für void? also:</p>
<pre><code class="language-cpp">void X::* p_pointer;
</code></pre>
<p>hier streikt der compiler, mit int compiliert alles.<br />
Warum ist das verboten? Wo liegt da das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269890/pointer-to-member</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 20:02:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269890.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Jul 2010 19:51:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer-to-member on Fri, 02 Jul 2010 19:51:00 GMT]]></title><description><![CDATA[<p>Hallo liebe Forenmitglieder!</p>
<p>Ich hbe mal eine Frage:</p>
<pre><code class="language-cpp">class X{int a,b;};

int X::* p_pointer;
</code></pre>
<p>ist ja ein Pointer auf einen Member der Klasse X vom Typ int.</p>
<p>Warum aber gibt es das nicht auch für void? also:</p>
<pre><code class="language-cpp">void X::* p_pointer;
</code></pre>
<p>hier streikt der compiler, mit int compiliert alles.<br />
Warum ist das verboten? Wo liegt da das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920631</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Fri, 02 Jul 2010 19:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Fri, 02 Jul 2010 19:58:19 GMT]]></title><description><![CDATA[<p>Seit wann kann man Objekte vom Typ void erzeugen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920633</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 02 Jul 2010 19:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Fri, 02 Jul 2010 20:08:40 GMT]]></title><description><![CDATA[<p>garnicht, aber ich will halt das gleiche wie void*, nur als pointer-to-member</p>
<p>beispielsweise so:</p>
<pre><code class="language-cpp">class Y {int a; float b;}

void Y::* ptr;

ptr = &amp;Y::a;
...
ptr = &amp;Y::b;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1920640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920640</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Fri, 02 Jul 2010 20:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Fri, 02 Jul 2010 20:09:58 GMT]]></title><description><![CDATA[<p>Dann schreib doch auch <code>void*</code> und nicht <code>void</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920641</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 02 Jul 2010 20:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Fri, 02 Jul 2010 20:50:26 GMT]]></title><description><![CDATA[<p>ein Pointer-to-member ist ja normalerweise der Offset einer Variable in einer Klasse. Wenn ich genau diesen Offset in einer Funktion erhalten will, könnte ich einen Pointer auf einen beliebigen Member eine Klasse gebrauchen, also dasbereits erwähnte</p>
<pre><code class="language-cpp">void Y::* ptr;
</code></pre>
<p>hingegen ist</p>
<pre><code class="language-cpp">void* ptr2;
</code></pre>
<p>ein Pointer auf eine gaz bestimmte Variable. Damit kann ich also den Offset innerhalb der Klasse (zumindest nicht derart einfach) erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920648</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Fri, 02 Jul 2010 20:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sat, 03 Jul 2010 08:45:11 GMT]]></title><description><![CDATA[<p>Hi hopeful_guest,</p>
<p>mir scheint im Augenblick, dass Du eigentlich von einem Problem der &quot;Überflexibilisierung&quot; stehst. <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="😉"
    /> ... und zwar so einem, das man oft mit Polymorphie am Besten begegnet.<br />
Mal andersherum: <em>Wenn</em> du so einen &quot;void-Member-Pointer&quot; in der Hand hättest - was würdest du damit anfangen?<br />
Spätestes beim Zugriff (ega, wie weit du ihn hinausschiebst) musst du wissen, was für ein Ding du in der Hand hast. Diese Information kann man prima den COmpiler verwalten lassen mittels &quot;virtual functions&quot; (Laufzeit) oder templates (Compilezeit).</p>
<p>Diese beiden Werkzeuge sind sehr mächtig, weswegen man sich erst einmal sehr gründlich prüfen sollten, ob sie wirklich nicht passen.<br />
... und sollten sie wirklich nicht passen, sollte man sich überlegen, ob man nicht vielleicht mit einer anderen Sprache besser bedient wäre.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920743</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 03 Jul 2010 08:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sat, 03 Jul 2010 12:21:24 GMT]]></title><description><![CDATA[<p>Hi hopeful_guest,</p>
<p>ich vermute mal du hälst es für einen normalen Pointer,<br />
aber es ist ein Pointer auf eine member variable.</p>
<p>Hier vielleicht ein kurzer Code-Ausschnitt, der dir den<br />
Unterschied verdeutlicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A{
public:
        int a;
        int b;

        A(int a, int b) : a(a), b(b){
        }
};

int main(){
        A a1(1, 2);
        A a2(3, 4);
        int A::* p1 = &amp;A::a;
        int A::* p2 = &amp;A::b;
        std::cout &lt;&lt; a1.*p1 &lt;&lt; std::endl;
        std::cout &lt;&lt; a1.*p2 &lt;&lt; std::endl;
        std::cout &lt;&lt; a2.*p1 &lt;&lt; std::endl;
        std::cout &lt;&lt; a2.*p2 &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>1<br />
2<br />
3<br />
4</p>
</blockquote>
<p>Du sagst quasi, welche member-Variable er verwenden soll, wenn du den<br />
Pointer auf einem Objekt verwendest.</p>
<p>Ich hoffe das hilft dir weiter.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920807</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 03 Jul 2010 12:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sat, 03 Jul 2010 14:45:28 GMT]]></title><description><![CDATA[<p>neinnein, ich weiß schon, dass das ein pointer auf einen Member ist. Genau das will ich auch, weil wiegesagt der dann eben genau gleich dem Offset in Bytes der Variable in die Strukur hinein ist.<br />
Ich habe schon eine Notlösung gefunden, mit polymorphie oder templates geht es leider auchnicht, weil ich die Funktion in einer templateklasse verwende, um eben den Offset einer Variable in der, als Template übergebenen Klasse zu berechnen.<br />
Aber das ist auch alles egal.<br />
Mich würde es lediglich interessieren, warum es denn keine solchen void Pointer-to-member gibt, in Analogie zum &quot;normalen&quot; void pointer, welcher ja &quot;legal&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920853</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Sat, 03 Jul 2010 14:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sat, 03 Jul 2010 20:41:40 GMT]]></title><description><![CDATA[<p>Suchst du vielleicht <code>offsetof</code> ? Das Makro funktioniert aber nur bei POD-Typen zuverlässig, verwende es nicht bei anderen Klassen!</p>
<p>Was willst du überhaupt erreichen? Ich habe bisher in C++ noch nie Pointer-to-Member (ausser auf Funktionen) benötigt und habe sie auch nie vermisst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920935</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 03 Jul 2010 20:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sat, 03 Jul 2010 22:20:46 GMT]]></title><description><![CDATA[<p>hopeful_guest schrieb:</p>
<blockquote>
<p>...Genau das will ich auch, weil wiegesagt der dann eben genau gleich dem Offset in Bytes der Variable in die Strukur hinein ist...</p>
</blockquote>
<p>Einerseits ist mir immer noch total schleierhaft, wofür man den &quot;Offset in Bytes einer Variable&quot; haben möchte (außer für Spielereien oder den Versuch, &quot;Reflection&quot; in C++ zu pfopfen).<br />
Andererseits bin ich mir gar nicht sicher, dass Member-pointer das auch garantiert liefern. Letztlich muss nur gewärleistet sein, dass über so einen Member-Pointer ein Zugriff auf das jeweilige Member möglich ist - dass das direkt über einen &quot;Byte-offset&quot; geschieht, ist nicht zwingend notwendig.</p>
<p>BTW: Hast du dir schon berlegt, wie das mit Vererbungshierachien (ggf. Mehrfachvererbung) etc. laufen soll?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920976</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 03 Jul 2010 22:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sun, 04 Jul 2010 07:30:38 GMT]]></title><description><![CDATA[<p>Wenn ihr unbedingt wissen wollt, geht es darum, in folgender Struktur, den richtign Offset zu hinterlegen:<br />
<a href="http://msdn.microsoft.com/en-us/library/bb172630%28v=VS.85%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/bb172630(v=VS.85).aspx</a><br />
Ich will dass der berechnet und nicht manuell als Kostante angegeben wird, um Fehler zu vermeiden. Das mit offsetof muss ich mir einmal anschauen, das kannte ich bisher nicht, danke für den Tipp, evtl. funktionierts damit sauber!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921039</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Sun, 04 Jul 2010 07:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-to-member on Sun, 04 Jul 2010 18:59:45 GMT]]></title><description><![CDATA[<p>ok, mit offsetof und templates sollte es schön funktionieren.Herzlichen Dank, für den Tipp, Nexus! Jedoch bleibt die Anfanges-Frage bestehen, warum denn</p>
<pre><code class="language-cpp">void* SampleClass::* ptr
</code></pre>
<p>verboten ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921266</guid><dc:creator><![CDATA[hopeful_guest]]></dc:creator><pubDate>Sun, 04 Jul 2010 18:59:45 GMT</pubDate></item></channel></rss>