<?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 einer ObjektMethode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Frage, und zwar habe ich ein SDK, dass in einer Funktion eine Methode entgegennimmt, um von diesem aus, später Objekte zu erzeugen.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">class Foo
{
    Foo()
    {
      /***/
    }

    static Foo* Alloc()
    {
       return new Foo();
    }
}

/**/
Register(..., Foo::Alloc, ...)
</code></pre>
<p>Ist es möglich Daten in einem Objekt zu speichern und eine nicht-statische Methode des Objektes anzugeben? Eventuell hat einer eine Idee was ich falsch mache?</p>
<pre><code class="language-cpp">class Foo
{
    Foo(void* p)
    {
      /*...irgendwas...*/
    }

    static Foo* Alloc(void* p)
    {
       return new Foo(p);
    }
}

class Temp
{
   private:
       void* mein_ptr;

    Temp(void* p)
    {
       mein = p;
    }

    Foo* Get()
    {
       return Foo::Alloc(mein_ptr);
    }
}

/**/
Temp* f = new Temp(mein_ptr);
Register(..., f-&gt;Get, ...)
</code></pre>
<p>Ich versuche also sozusagen Daten zu speichern, damit er diese mit dem Argument aufruft, also sozusagen einen Wert den ich später im Konstruktor benutzen kann. Da ich jedoch die Funktion &quot;Register&quot; nicht verändern kann, und er nur FUNC() aufruft ohne Argumente habe ich gedacht, baue ich mir eine Hiflsklasse..</p>
<p>Leider sagt er die ganze Zeit: Cannot pass &lt;unkown_type&gt;. Hat einer eine Idee?</p>
<p>Ich danke euch...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224586/pointer-einer-objektmethode</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 07:22:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224586.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Oct 2008 00:09:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Sun, 12 Oct 2008 00:10:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Frage, und zwar habe ich ein SDK, dass in einer Funktion eine Methode entgegennimmt, um von diesem aus, später Objekte zu erzeugen.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">class Foo
{
    Foo()
    {
      /***/
    }

    static Foo* Alloc()
    {
       return new Foo();
    }
}

/**/
Register(..., Foo::Alloc, ...)
</code></pre>
<p>Ist es möglich Daten in einem Objekt zu speichern und eine nicht-statische Methode des Objektes anzugeben? Eventuell hat einer eine Idee was ich falsch mache?</p>
<pre><code class="language-cpp">class Foo
{
    Foo(void* p)
    {
      /*...irgendwas...*/
    }

    static Foo* Alloc(void* p)
    {
       return new Foo(p);
    }
}

class Temp
{
   private:
       void* mein_ptr;

    Temp(void* p)
    {
       mein = p;
    }

    Foo* Get()
    {
       return Foo::Alloc(mein_ptr);
    }
}

/**/
Temp* f = new Temp(mein_ptr);
Register(..., f-&gt;Get, ...)
</code></pre>
<p>Ich versuche also sozusagen Daten zu speichern, damit er diese mit dem Argument aufruft, also sozusagen einen Wert den ich später im Konstruktor benutzen kann. Da ich jedoch die Funktion &quot;Register&quot; nicht verändern kann, und er nur FUNC() aufruft ohne Argumente habe ich gedacht, baue ich mir eine Hiflsklasse..</p>
<p>Leider sagt er die ganze Zeit: Cannot pass &lt;unkown_type&gt;. Hat einer eine Idee?</p>
<p>Ich danke euch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597660</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Sun, 12 Oct 2008 00:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Sun, 12 Oct 2008 02:26:53 GMT]]></title><description><![CDATA[<p>Nein. Das ist so nicht möglich, weil die Funktionssignatur nicht stimmt. Im ersten Moment sieht das hier:</p>
<pre><code class="language-cpp">f-&gt;Get()
</code></pre>
<p>Zwar richtig aus, ist es aber nicht, weil du da ja nicht f-&gt;Get() als Funktion angibst, sondern das Resultat, was eine Funktion vom Typ:</p>
<pre><code class="language-cpp">Foo* (*) (void*)
</code></pre>
<p>ist. Aber einen vom Typ:</p>
<pre><code class="language-cpp">Foo* (*) ()
</code></pre>
<p>erwartet wird.</p>
<p>Als alternativen würde ich da entweder einen Standardkonstruktor nehmen, oder was Wohl ev. besser ist einen statischen Wert für alle Klassen, welchen du dann jeweils ändern kannst und als Standardparameter übergeben wird.</p>
<pre><code class="language-cpp">struct Foo
{
    Foo ( void* v ){}
    static Foo* Alloc()
    {
       return new Foo(v_);
    }

    static void* v_;
}
void* Foo::v_ = 0;
</code></pre>
<pre><code class="language-cpp">class Foo
{
    Foo( int i = 2) // Defaultinitialisierung
    {
      /***/
    }

    static Foo* Alloc()
    {
       return new Foo();
    }
}
</code></pre>
<p>Wobei ich mal annehme, dass die Defaultinitialisierung nicht so ganz das ist, was du willst. Also würde ich die erste Variante nehmen und dann den statischen Wert verändern, wenn du einen anderen benötigst.</p>
<pre><code class="language-cpp">Foo::v_ = 2;
Register(..., &amp;Foo::Alloc, ...)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1597670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597670</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 12 Oct 2008 02:26:53 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Sun, 12 Oct 2008 09:58:11 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich danke dir. Und was würdest du mir empfehlen wenn ich mehrere Werte brauche? Bei der statischen Behandlung kann ich ja nur einen Wert setzen. Selbst wenn ich eine liste hätte mit seperaten Einträgen, würde ich beim Standardaufruf der einfachen Alloc() Funktion nicht wissen welchen Eintrag ich brauche <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=":-/"
      alt="😕"
    /></p>
<p>Ich danke dir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597722</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Sun, 12 Oct 2008 09:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Sun, 12 Oct 2008 11:15:49 GMT]]></title><description><![CDATA[<p>DonnerCobra schrieb:</p>
<blockquote>
<p>Hi!</p>
<p>Ich danke dir. Und was würdest du mir empfehlen wenn ich mehrere Werte brauche? Bei der statischen Behandlung kann ich ja nur einen Wert setzen. Selbst wenn ich eine liste hätte mit seperaten Einträgen, würde ich beim Standardaufruf der einfachen Alloc() Funktion nicht wissen welchen Eintrag ich brauche <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=":-/"
      alt="😕"
    /></p>
<p>Ich danke dir.</p>
</blockquote>
<p>Ich glaube ich weiss, was du willst. Du willst bei jedem Objekt, dass für dich erzeugt wird die Konstruktorparameter selber bestimmen, ja?<br />
Warum glaubst du denn, dass du das brauchst? Weil das ist so direkt nicht so einfach umzusetzen und wahrscheinlich auch nicht nötig..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597748</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 12 Oct 2008 11:15:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Sun, 12 Oct 2008 21:28:11 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Weil ich eine Skriptsprache implementiert habe. Also nötig ist es auf jeden Fall, dass ich nachträglich einen Pointer mitübertragen muss.</p>
<p>Ich weiß nicht ob das den Rahmen sprengen würde. Also, die Skriptsprache leitet auf die Registerfunktion weiter. Dort nehme ich einen Parameter entgegen.</p>
<p>Ich habe also auch eine Klasse gewrappt, und aus dem Parameter aus dem ich letztlich mit zwei anderen Befehlen eine instanz dieser Klasse erstellen kann, die müsste ich halt weiterleiten an den Konstruktor um die Klasse entsprechend darauf vorzubereiten.</p>
<p>Hast du eine Idee wie ich es eventuell angehen könnte?</p>
<p>Danke dir..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597957</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Sun, 12 Oct 2008 21:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Mon, 13 Oct 2008 08:56:06 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht ganz sicher, was du haben willst. Bring mal ein &quot;konkreteres&quot; Beispiel.<br />
Wenn es immernoch nach dem obigen Schema geht, kannst du ja einfach den statischen Parameter vor jeder Erzeugung so ändern, wie er sein soll.</p>
<pre><code class="language-cpp">Foo::v_ = 2;
lib_ruf_meine_funktion_auf (); // irgendwo wird dann new obj (v_) aufgerufen
Foo::v_ = 5;
lib_ruf_meine_funktion_auf ();
</code></pre>
<p>Wenn die lib da nichts anderes anbietet und ich dein Problem richtig verstehe musst du halt so einen Umweg gehen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598092</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 13 Oct 2008 08:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Mon, 13 Oct 2008 10:49:34 GMT]]></title><description><![CDATA[<p>HI!</p>
<p>Ich probiers es nochmal <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="🙂"
    /> Also, ich habe ein SDK was die Register() Methode enthält, und der Code ist closed, also den Inhalt der Register Methode kann ich nicht ändern.</p>
<p>Die Registermethode bekommt also eine Methode, die das Programm aufrufen kann, WENN es ein Objekt der Klasse braucht.</p>
<p>Beispiel</p>
<pre><code>class meinTest : public NodeData{

     static NodeData* Alloc()
     {
         return new meintest;
     }

}

Dann registrieren mit     Register(meinTest::Alloc)
</code></pre>
<p>Soweit so gut, jedoch wird die Funktion ohne Parameter aufgerufen. Mein Ziel ist es, das ich IRGENDWIE einen Parameter an diese Funktion übergeben kann, egal wie, denn wenn ich 10 Klassen habe, die ein Objekt darstellen und das Programmm mal dies, oder mal das braucht, dann kann ich das nicht nach einer Liste machen, weil das ja vorher nicht absehbar ist welches Objekt er haben will.</p>
<p>Es ist ein echt &quot;einfaches Problem&quot;, aber die Lösung ist wahrscheinlich nicht vorhanden, oder?</p>
<p>danke....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598151</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Mon, 13 Oct 2008 10:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Mon, 13 Oct 2008 11:49:04 GMT]]></title><description><![CDATA[<p>Ich verstehe immernoch nicht ganz, für was du den Parameter brauchst.</p>
<p>Wie ich das verstehe willst du sowas machen:</p>
<pre><code class="language-cpp">class meinTest : public NodeData{

     static NodeData* Alloc( int id)
     {
         if (id == 2)
            return new meintest;
         if (id == 5)
            return new foo;
         ...
     }
}
</code></pre>
<p>Wenn dem so ist. Kannst du nicht einfach mehrere Funktionen registrieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598176</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 13 Oct 2008 11:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Mon, 13 Oct 2008 21:26:28 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Exakt, genau sowas bräuchte ich, irgendwie bräuchte ich einen parameter.<br />
Jetzt das Problem. Die Registermethode gehört ja zum closed SDK und ruft nur &quot;()&quot; ohne Parameter auf.</p>
<p>Deswegen suche ich ja eine Möglichkeit irgendwie ein Argument mit zu übergeben, was ursprünglich ja gar nicht vorgesehen ist.</p>
<p>Bis dann..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598486</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Mon, 13 Oct 2008 21:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Tue, 14 Oct 2008 08:07:48 GMT]]></title><description><![CDATA[<p>DonnerCobra schrieb:</p>
<blockquote>
<p>Deswegen suche ich ja eine Möglichkeit irgendwie ein Argument mit zu übergeben, was ursprünglich ja gar nicht vorgesehen ist.</p>
<p>Bis dann..</p>
</blockquote>
<p>Ok. Dann haben wir jetzt einen Ansatz. Aber was ich nicht verstehe, WO willst du einen Parameter übergeben? In welchen Situationen? (Ich bin immernoch der Meinung, dass du das halt über ne statische Variable machen kannst, die dir das &quot;aktuelle&quot; Objekt anzeigt. Weil du kannst eine Funktion ja nur einmal regestrieren und dann läuft das ganze. Du brauchst dementsprechend einen weiteren Anhaltspunkt, wann welches Objekt gebraucht wird und da änderst du halt dann die statische Variable. Fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598593</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 14 Oct 2008 08:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Tue, 14 Oct 2008 08:30:14 GMT]]></title><description><![CDATA[<p>Es erscheint mir, als wenn du gegen die Bibliothek arbeitest und nicht mit der Bibliothek.</p>
<p>Wenn kein Parameter vorgesehen ist, ist das Konzept anscheinend, dass die erzeugende Funktion (Foo::Allloc) entweder Default-Objekte konstruiert oder z.B. nach dem Prototype-Pattern.</p>
<p>Die konkrete Initialisierung findet woanders statt. Irgendwoher muss der &quot;Erzeuger&quot; ja auch wieder wissen, wie er die Objekte zu erstellen hat. Das bedeutet wiederum - wenn du diese Parameter gezielt manipulieren kannst - dass du auch den Zeitpunkt des Aufrufs genau kennst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598608</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 14 Oct 2008 08:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Tue, 14 Oct 2008 09:25:57 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Es ist nicht unbedingt der Standard Konstruktor nötig. Was ich dem Konstruktor übergebe, ist ja egal, das entscheide ich selbst in Alloc(). Nur die Funktion selbst wird ohne Parameter aufgerufen, und das ist gegen die Bibliothek, da hast du Recht.</p>
<p>Aber was danach passiert, ist egal, da kann ich tun was ich will. Da könnte ich rein theoretisch auch das Programm beenden.</p>
<p>Ich hatte halt gehofft, das ich irgendwie einen Parameter mit übergeben kann, dass ich in der Alloc Methode entgegennehmen kann.</p>
<p>Bye <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/1598640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598640</guid><dc:creator><![CDATA[DonnerCobra]]></dc:creator><pubDate>Tue, 14 Oct 2008 09:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer einer ObjektMethode on Tue, 14 Oct 2008 11:59:47 GMT]]></title><description><![CDATA[<p>DonnerCobra schrieb:</p>
<blockquote>
<p>Hi!</p>
<p>Es ist nicht unbedingt der Standard Konstruktor nötig. Was ich dem Konstruktor übergebe, ist ja egal, das entscheide ich selbst in Alloc(). Nur die Funktion selbst wird ohne Parameter aufgerufen, und das ist gegen die Bibliothek, da hast du Recht.</p>
<p>Aber was danach passiert, ist egal, da kann ich tun was ich will. Da könnte ich rein theoretisch auch das Programm beenden.</p>
<p>Ich hatte halt gehofft, das ich irgendwie einen Parameter mit übergeben kann, dass ich in der Alloc Methode entgegennehmen kann.</p>
<p>Bye <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>
</blockquote>
<p>Es geht nicht darum, ob du das darfst, es geht darum, ob das Sinn macht, was du machst. (Kann es durch aus..)<br />
Aber lies mal meinen Post nochmal durch. Ich will auf etwas ganz anderes raus. Mehr auf die Frage, was würdest du machen, wenn du Zugriff auf die Funktion hättest und selber bestimmen kannst?</p>
<p>Das Problem ist ja, dass die Funktion dir ein Objekt erstellt, welchem du gerne einen Parameter zur Initialisierung übergeben würdest.</p>
<p>so etwas:</p>
<pre><code class="language-cpp">createObject (2);
createObject (5);
...
</code></pre>
<p>Nur dein Problem ist, dass du createObject keinen Parameter übergeben kannst, respektive die lib das für dich macht. Nun hast du aber ja das gleiche Problem, wenn du das selber machen musst, musst du wissen, WANN du WAS übergeben willst. Und das kannst du äquivalent zu dem gewünschten Beispiel oben machen, indem du einfach die statische Var änderst. (es gibt sicher noch andere Wege. Das ist imho einfach der offensichtlichste).</p>
<pre><code class="language-cpp">static_var = 2;
createObject (); // lib ruft das auf
static_var = 5;
createObject ();
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1598736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598736</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 14 Oct 2008 11:59:47 GMT</pubDate></item></channel></rss>