<?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[[gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern]]></title><description><![CDATA[<p>Moin Moin,</p>
<p>ich arbeite mich gerade in das Thema function pointer ein.</p>
<p>Ich habe einen Wrapper mit einer privaten Klasse Base. Von Base sollen mehrere Klassen erben, die alle einige Klassenspezifische Funktionen mit der gleichen Signatur (void func()) haben.<br />
Ich möchte, dass eine geerbte Klasse alle eigenen Funktionen als Function Pointer in einem Container speichert, der in der Base-Klasse definiert ist. Die Function Pointer sollen dann einfach von der Wrapper-Klasse aus aufgerufen werden.</p>
<p>Optimal wäre es, wenn ich in der geerbten Klasse nur eine virtuelle Funktion &quot;registerFunctions()&quot; implementieren muss, in der auf möglichst einfache Weise die function Pointer erstellt und gespeichert werden.</p>
<p>Blöde Frage, aber trotzdem:<br />
Wie mache ich das und ist das so überhaupt möglich?</p>
<p>Ich habe es schon mit den eigentlichen function pointern void(*func)()und mit std::function versucht und bin immer daran gescheitert, dass ich einen vererbten Klassentyp als Basis-Klassentyp speichern muss.<br />
Und auf ein switch-case in der vererbten Klasse möchte ich eigentlich verzichten...</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337184/gelöst-function-pointer-von-vererbten-klassen-in-basis-klasse-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:02:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337184.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Mar 2016 13:43:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 18:00:57 GMT]]></title><description><![CDATA[<p>Moin Moin,</p>
<p>ich arbeite mich gerade in das Thema function pointer ein.</p>
<p>Ich habe einen Wrapper mit einer privaten Klasse Base. Von Base sollen mehrere Klassen erben, die alle einige Klassenspezifische Funktionen mit der gleichen Signatur (void func()) haben.<br />
Ich möchte, dass eine geerbte Klasse alle eigenen Funktionen als Function Pointer in einem Container speichert, der in der Base-Klasse definiert ist. Die Function Pointer sollen dann einfach von der Wrapper-Klasse aus aufgerufen werden.</p>
<p>Optimal wäre es, wenn ich in der geerbten Klasse nur eine virtuelle Funktion &quot;registerFunctions()&quot; implementieren muss, in der auf möglichst einfache Weise die function Pointer erstellt und gespeichert werden.</p>
<p>Blöde Frage, aber trotzdem:<br />
Wie mache ich das und ist das so überhaupt möglich?</p>
<p>Ich habe es schon mit den eigentlichen function pointern void(*func)()und mit std::function versucht und bin immer daran gescheitert, dass ich einen vererbten Klassentyp als Basis-Klassentyp speichern muss.<br />
Und auf ein switch-case in der vererbten Klasse möchte ich eigentlich verzichten...</p>
<p>Viele Grüße<br />
Cherup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490292</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 18:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 15:00:03 GMT]]></title><description><![CDATA[<p>Cherup schrieb:</p>
<blockquote>
<p>...<br />
std::function versucht und bin immer daran gescheitert, dass ich einen vererbten Klassentyp als Basis-Klassentyp speichern muss.</p>
</blockquote>
<p>Erklär mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490298</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Mar 2016 15:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 15:30:49 GMT]]></title><description><![CDATA[<p>Ich definiere den vector mit den Funktionspointern ja in der Base-Klasse, daher muss er ja in etwa wie &quot;vector&lt;std::function&lt;void(Base*)&gt;&gt;&quot; aussehen. Ich kenne den Klassentyp der vererbten Klasse ja nicht.<br />
Die Funktionen, die ich dem vector zuweisen möchte haben aber den Typ std::function&lt;void(Derived*)&gt;.</p>
<pre><code>//vector in Base:
std::vector&lt;std::function&lt;void(Base*)&gt;&gt; vec;

//Pointer in der Derived erstellen:
std::function&lt;void(Derived*)&gt; test = &amp;Derived::func(); 
//funktioniert, kann aber dem vector nicht zugewiesen werden.
std::function&lt;void(Base*)&gt; test = &amp;Derived::func(); 
//funktioniert nicht, gibt mir folgenden Fehler in functional zurück:
//functional:558: error: pointer to member type 'void (Derived::)()' incompatible with object type 'Wrapper::Base'
</code></pre>
<p>Da liegt das eigentliche Problem. Obwohl Derived ja eigentlich auch Base ist...</p>
<p>Vielleicht mache ich auch einfach nur einen Denkfehler...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490299</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 15:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 15:48:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//vector in Base:
std::vector&lt;std::function&lt;void()&gt;&gt; vec;

//Pointer in der Derived erstellen:
std::function&lt;void()&gt; test = [=]()mutable{ func(); }; // mutable nur, wenn func nicht const

vec.push_back(test);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2490301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490301</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Mar 2016 15:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 17:02:44 GMT]]></title><description><![CDATA[<p>Danke, das klappt, da wäre ich wohl nie drauf gekommen...<br />
Kannst du mir die Syntax genauer erklären? ich verstehe z.B. das [=] nicht.</p>
<p>Andere Frage: wird damit die Funktion der Instanz der Klasse aufgerufen? Ich greife in den Funktionen auf member-Variablen zu...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490309</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 17:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 17:46:43 GMT]]></title><description><![CDATA[<p>Cherup schrieb:</p>
<blockquote>
<p>Kannst du mir die Syntax genauer erklären? ich verstehe z.B. das [=] nicht.</p>
</blockquote>
<p>Das macht den this Pointer zugreifbar. Stichwort lambda.</p>
<p>Cherup schrieb:</p>
<blockquote>
<p>Andere Frage: wird damit die Funktion der Instanz der Klasse aufgerufen? Ich greife in den Funktionen auf member-Variablen zu...</p>
</blockquote>
<p>Ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490312</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Mar 2016 17:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 18:00:22 GMT]]></title><description><![CDATA[<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>
<p>Ich werd mich wohl auch mal mit Lambda-Ausdrücken beschäftigen müssen, hab ich noch nicht mit gearbeitet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490315</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 18:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 18:25:31 GMT]]></title><description><![CDATA[<p>-&gt; <a href="http://www.cprogramming.com/c++11/c++11-lambda-closures.html" rel="nofollow">Lambda Functions in C++11 - the Definitive Guide</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490317</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 14 Mar 2016 18:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 18:42:03 GMT]]></title><description><![CDATA[<p>Danke, werds lesen <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>Noch eine blöde Frage:<br />
Kann man den Ausdruck &quot;[=]()mutable{ func(); }&quot; irgendwie vereinfachen? Also das man das nicht bei jeder Funktion komplett schreiben muss, sondern ein einfacheres Alias hat?</p>
<p>Mein Kopf ist grad etwas dicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490319</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 18:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 20:45:49 GMT]]></title><description><![CDATA[<p>Auf die Schnelle:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class foo
{
public:
  void a() {  std::cerr &lt;&lt; 1 &lt;&lt; &quot;\n&quot;; }
  void b() {  std::cerr &lt;&lt; 2 &lt;&lt; &quot;\n&quot;; }
  void fill()
  {
    auto mkf = [=](auto f)
    {
      return [=]() mutable { (this-&gt;*f)(); };
    };

    std::function&lt;void()&gt; x = mkf(&amp;foo::a);
    x();
    std::function&lt;void()&gt; y = mkf(&amp;foo::b);
    y();
  }
 };

int main()
{
  foo aFoo;
  aFoo.fill();
}
</code></pre>
<p>Ob das Ganze Sinn macht, bezweifle ich allerdings ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2490335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490335</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Mar 2016 20:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] function pointer von vererbten Klassen in Basis-Klasse speichern on Mon, 14 Mar 2016 20:55:00 GMT]]></title><description><![CDATA[<p>Stimmt, das macht relativ wenig Sinn. Hatte gehofft, irgendwas in die Base-Klasse einbauen zu können, das die Funktionserstellung vereinfacht...<br />
Tja dann muss es halt so gehen <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="😉"
    /></p>
<p>Danke für deine Hilfe <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/2490336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2490336</guid><dc:creator><![CDATA[Cherup]]></dc:creator><pubDate>Mon, 14 Mar 2016 20:55:00 GMT</pubDate></item></channel></rss>