<?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[Zeiger auf beliebige Memberfunktion]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich arbeite seit bedenklicher Zeit an einem GUI System, bis jetzt lief eigentlich alles gut, es gibt eine domain für die Visualisierung, die auf Basis der Fenster Rendergeometrie erstellt und über Directx 11 rendert.</p>
<p>Die Fenster lassen sich polymorphisch von einer grundfensterklasse ableiten und beinhalten wiederum einen Speicher für wiederum polymorphische Controls, die einfach im Konstruktor des Fensters hinzugefügt werden können,insofern kann sich der Benutzer schon ganz gut neue Fenster zusammenstellen.</p>
<p>Nun würde ich gerne ein Graphencontrol erstellen, das funktioniert soweit gut, aber ich suche jetzt nach einer Möglichkeit, wie ich von dem Fenster selber die Daten zu dem Control rüberschleusen kann, unzwar derartig, dass hinter dem Fenster eine beliebige Klasse stehen kann.</p>
<p>Darum kann ich den normalen Syntax von memberpointern nicht verwenden und brauche etwas anderes.</p>
<p>Ich würde mich wirklich freuen, wenn sich jemand finden würde, der mir irgendein sostiges Zeigertool liefern könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318974/zeiger-auf-beliebige-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:31:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318974.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Aug 2013 11:50:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Fri, 02 Aug 2013 11:50:26 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich arbeite seit bedenklicher Zeit an einem GUI System, bis jetzt lief eigentlich alles gut, es gibt eine domain für die Visualisierung, die auf Basis der Fenster Rendergeometrie erstellt und über Directx 11 rendert.</p>
<p>Die Fenster lassen sich polymorphisch von einer grundfensterklasse ableiten und beinhalten wiederum einen Speicher für wiederum polymorphische Controls, die einfach im Konstruktor des Fensters hinzugefügt werden können,insofern kann sich der Benutzer schon ganz gut neue Fenster zusammenstellen.</p>
<p>Nun würde ich gerne ein Graphencontrol erstellen, das funktioniert soweit gut, aber ich suche jetzt nach einer Möglichkeit, wie ich von dem Fenster selber die Daten zu dem Control rüberschleusen kann, unzwar derartig, dass hinter dem Fenster eine beliebige Klasse stehen kann.</p>
<p>Darum kann ich den normalen Syntax von memberpointern nicht verwenden und brauche etwas anderes.</p>
<p>Ich würde mich wirklich freuen, wenn sich jemand finden würde, der mir irgendein sostiges Zeigertool liefern könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342927</guid><dc:creator><![CDATA[neuerbenutzer]]></dc:creator><pubDate>Fri, 02 Aug 2013 11:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Fri, 02 Aug 2013 12:49:19 GMT]]></title><description><![CDATA[<p>Ok, mir ist da noch eine Möglichkeit eingefallen, die ich aber ziemlich dreckig finde. ich könnte einen pointer auf memberfunktionen der basisklasse der controls erstellen und dort virtuielle methoden bereitstellen die das fenster, welches das gaphencontrol verwendet überschreibt.</p>
<p>Das würde dann aber wieder bedeuten, das der Benutzer nur eine begrenzte Zahl an solchen Kommunikationen zu verfügung hat, jhe nachdem, wieviele Funktionen in der Basisklasse bereitgestellt werden und wie gesagt ich finde diese Lösung sieht sehr unsauber aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342954</guid><dc:creator><![CDATA[neuerbenutzer]]></dc:creator><pubDate>Fri, 02 Aug 2013 12:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Fri, 02 Aug 2013 13:23:09 GMT]]></title><description><![CDATA[<p>Du schreibst wirr.<br />
Also was konkret willst du machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342968</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 02 Aug 2013 13:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Fri, 02 Aug 2013 14:52:29 GMT]]></title><description><![CDATA[<p>Ok, sorry das ist schwierig zu erklären.</p>
<p>Also, ich habe eine klasse graphcontrol, welches von der basisklasse guielement abgleitet ist und in einer beliebigen polymorphischen Klasse die von der Klasse fenster abgeleitet ist gespeichert wird.</p>
<p>Was ich jetzt machen will ist, dem graphcontrol in irgendeiner Form die Daten einzugeben, die dargestellt werden sollen. Das würde ich aber am liebsten über einen Funktionszeiger machen, der einem wert x den Funktionswert zuordnet und dem control zurückgibt. Das heist ich würde in jeder Fenster Klasse die das Control benutzen will nur eine Funktion implementieren müssen, welche zum Beispiel so aussieht.</p>
<pre><code>float getwert(float x)
{
   return x*x;
}
</code></pre>
<p>Dann würde ich dem Control einen Zeiger übergeben, der einfach nur darauf verweist und das Control könnte sich alle Daten einfach rausziehen.</p>
<p>Ich könnte die Daten auch in dem Fenster generieren und dem control übergeben aber das wäre meiner meinung nach für den Benutzer, der seine Daten in dem Control anzeigen will unpraktisch insofern das control intern noch daten hinzufügen würde und die koordinaten noch in Koordinaten innerhalb des Anzeigefeldes umrechnen würde.</p>
<p>Das Problem ist nun, das ich nicht weiß wie ich diesen Zeiger aufbauen soll. Der schwierige Teil daran ist, das das spezifische Fenster ja von der Fensterklasse abgeleitet wird und ich auf eine memberfunktion einer unbekannten Klasse verweisen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343006</guid><dc:creator><![CDATA[neuerbenutzer]]></dc:creator><pubDate>Fri, 02 Aug 2013 14:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Fri, 02 Aug 2013 17:34:00 GMT]]></title><description><![CDATA[<p>Ah, besser, jetzt verstehe ich glaube ich was du willst <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>Möglichkeit 1: <code>std::function</code> (bzw. <code>boost::function</code> ).<br />
Damit hast du einen Container für beliebige Funktoren.</p>
<p>Mit <code>std::bind</code> (bzw. <code>boost::bind</code> ) kannst du solche Funktoren aus freien Funktionen oder Memberfunktionen beliebiger Klassen erzeugen -- und dabei wenn nötig gleich noch Parameter wie z.B. den impliziten &quot;this&quot; Parameter in die erzeugten Funktoren &quot;hineinbinden&quot;.</p>
<p>Möglichkeit 2: definiere eine Interface-Klasse über die das Graph-Control die Daten abfragt. Also so</p>
<pre><code class="language-cpp">class IGraphControlDataSource
{
public:
    virtual float GetData(float x) = 0;
};
</code></pre>
<p>Die Fensterklasse müsste dann eine kleine Hilfsklasse definieren die von <code>IGraphControlDataSource</code> abgeleitet ist, und die <code>GetData</code> Funktion passend implementiert.<br />
Und das Graph-Control bekommt statt eines Funktionszeigers einen Zeiger auf die Interface-Klasse übergeben.</p>
<p>Sofern es sich nur um eine Funktion handelt würde ich Möglichkeit 1 vorziehen - da wesentlich einfacher in der Anwendung. (Für die Implementierung des Controls macht es keinen Unterschied, für den Anwender des Controls ist es aber viel angenehmer wenn er einfach <code>bind(&amp;Fenster::GetData, this, _1)</code> schreiben kann, statt dauernd Hilfsklassen zu schreiben die dann eh nur aus einer Zeile Code bestehen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343052</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 02 Aug 2013 17:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Sat, 03 Aug 2013 15:53:33 GMT]]></title><description><![CDATA[<p>Ok, danke für die Vorschläge, ich glaube die erste Möglichkeit ist wesentlich flexibler, nur leider verstehe ich sie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> .</p>
<p>Sorry Schonmal dafür ich hab bis jetzt alles ohne Funktionspointer und ähnliches geschafft <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="🙂"
    /> . bind generiert mir also einen Funktionszeiger? Wenn ja, unter welchem typ wird der abgespeichert, im Internet habe ich bis jetzt immer nur die verwendung von bind mit dem auto präfix gesehen.</p>
<p>Wenn Ich den Rückgabewert von bind aber in der controlklasse speichern muss, dann dürfte auto ja nicht funktionieren, also wie speichere ich das irgendwas? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Graphenfenster:</p>
<pre><code>class graphfenster : public fenster
{
    void getwert(float* ret,float x)
    {

    }
    //Muss ich den Objektzeiger in den Parametern mitführen?

    graphfenster()
    {
        Objekt_in_graphgui = bind(&amp;getwert,this,_1,_2);
        //Ich glaube ich verstehe den syntax von bind nicht
    }
}
</code></pre>
<pre><code>class fenster
{
	friend class guielement;
protected:
	guielement** controls;

   	XMFLOAT3 position;
 	XMFLOAT2 größe;

	unsigned int controlcount;
	unsigned int controlspeicher;

	XMMATRIX transform;
	XMMATRIX detransform;
	XMMATRIX eigentransform; //transformationsmatrix die das eigentliche fenster einbindet
	XMMATRIX deeigentransform;

	...es folgen unmengen an weiteren Funktionen und überschreibbaren Funktionen die events weiterleiten sowie viele triviale Variablen...
public:
	fenster();
	virtual ~fenster();

	#pragma region Controls verarbeiten
	void addgui(guielement* objekt);
	bool deletegui(unsigned int index);
	bool replacegui(unsigned int index, guielement* objekt);
	#pragma endregion
};
</code></pre>
<p>guicontrol:</p>
<pre><code>class graphgui : public guielement
{
	XMFLOAT2 start;
 	XMFLOAT2 größe;

	XMFLOAT3* daten; 
  	unsigned int datencount;
	unsigned int funktionen;

	XMFLOAT3* farben;

        //Wird zum refresh von der Fensterdomain aufgerufen (abstrakte funktion in guielement)
	void getvisual(guielementreturn* einausgabe)
        {
           float* kanäle = new float[funktionen];
           bildpunktschleife:
               Objekt_in_graphgui(kanäle,schleifenposition); //Ich weiß wirklich nicht wie das Funktionsobjekt aussehen soll
               Daten aus kanäle in den geometriespeicher eintragen 
           schleife ende
        } //aus dieser Funktion müsste dann getwert aufgerufen werden
public:
	irgendeintyp Objekt_in_graphgui; 

	float getx() { return start.x; }
	float getbreite() { return größe.x; }
	float gety() { return start.y; }
	float gethöhe() { return größe.y; }

	graphgui(XMFLOAT3 pos, XMFLOAT2 xy2,XMFLOAT2 initialmin, XMFLOAT2 initialmax,unsigned int datenpunkte,unsigned int funktionen,XMFLOAT3* farben,void* set);
	graphgui(XMFLOAT3 pos, XMFLOAT2 xy2,XMFLOAT2 initialmin, XMFLOAT2 initialmax,unsigned int datenpunkte,unsigned int funktionen,void* set);
	~graphgui();
};
</code></pre>
<p>Ich wäre dir oder wenns sein muss auch jemandem anderen :p sehr dankbar, wenn er mir mit der implementierung helfen könnte, ich denke nämlich ich habe eine falsche vorstellung von bind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343210</guid><dc:creator><![CDATA[neuerbenutzer]]></dc:creator><pubDate>Sat, 03 Aug 2013 15:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf beliebige Memberfunktion on Mon, 05 Aug 2013 05:59:58 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u100590" rel="nofollow">Martin Richter</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343465</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 05 Aug 2013 05:59:58 GMT</pubDate></item></channel></rss>