<?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[Funktionsargument]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>eine globale funktion ist definiert durch:</p>
<pre><code class="language-cpp">double globfunc(MyClass obj, vector&lt;double&gt; x);
</code></pre>
<p>jetzt soll in einer klassenmethode der Klasse myClass ein funktionszeiger *f definiert werden, welcher auf die Funktion globfunc weiterleitet und dabei Argument obj mit dem Zeiger auf eigene Klasse belegt.</p>
<pre><code class="language-cpp">MyClass::Methode()
{
     double(*f)(vector&lt;double&gt; x) = globfunc[obj=this]; //sowas in der art
}
</code></pre>
<p>wie ist da die richtige schreibweise, gibt es solche Möglichkeit überhaupt?</p>
<p>Anmerkung:<br />
f muss unbedingt vom Typ double(*)(vector&lt;double&gt;) sein!</p>
<p>eine klassenmethode MyClass::func(vector&lt;double&gt; x)<br />
hat den Typ double(MyClass::*)(vector&lt;double&gt;) und kann auch nicht gematch werden bei<br />
double(*f)(vector&lt;double&gt; x) = this-&gt;func</p>
<p>P.S.<br />
wenn es alles nicht verständlich war dann:</p>
<p>wie matche ich double(<em>)() und double(class::</em>)()</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216019/funktionsargument</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 19:17:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216019.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jun 2008 09:12:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:12:15 GMT]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>eine globale funktion ist definiert durch:</p>
<pre><code class="language-cpp">double globfunc(MyClass obj, vector&lt;double&gt; x);
</code></pre>
<p>jetzt soll in einer klassenmethode der Klasse myClass ein funktionszeiger *f definiert werden, welcher auf die Funktion globfunc weiterleitet und dabei Argument obj mit dem Zeiger auf eigene Klasse belegt.</p>
<pre><code class="language-cpp">MyClass::Methode()
{
     double(*f)(vector&lt;double&gt; x) = globfunc[obj=this]; //sowas in der art
}
</code></pre>
<p>wie ist da die richtige schreibweise, gibt es solche Möglichkeit überhaupt?</p>
<p>Anmerkung:<br />
f muss unbedingt vom Typ double(*)(vector&lt;double&gt;) sein!</p>
<p>eine klassenmethode MyClass::func(vector&lt;double&gt; x)<br />
hat den Typ double(MyClass::*)(vector&lt;double&gt;) und kann auch nicht gematch werden bei<br />
double(*f)(vector&lt;double&gt; x) = this-&gt;func</p>
<p>P.S.<br />
wenn es alles nicht verständlich war dann:</p>
<p>wie matche ich double(<em>)() und double(class::</em>)()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531355</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:31:17 GMT]]></title><description><![CDATA[<p>Das geht nicht. Die eine Member-Variante hat implizit this als Argument mit drin, die globale nicht. Wozu willst Du das denn machen?<br />
Beschreib doch mal, was Du damit genau bezwecken willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531368</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:41:18 GMT]]></title><description><![CDATA[<p>ich habe:</p>
<p>Funktion f1:<br />
double(*f1)(type1, type2)</p>
<p>Funktion f2<br />
double(*f2)(type2)</p>
<p>ich brauche folgende &quot;umleitung&quot;, &quot;umwandlung&quot;:</p>
<p>type1 t; //initialisiert<br />
...<br />
f2 = f1(t,)</p>
<p>wie ist die richtige syntax???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531375</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:45:34 GMT]]></title><description><![CDATA[<p>Das erklärt es noch nicht. Wozu brauchst Du denn die Funktion mit dem reinen Double-Argument? Vor allem, wenn es IN der Klasse benutzt werden soll?<br />
Und wieso als Funktionszeiger? In Deinem Beispiel ist es fest eingebrannt. Da bringt ein Funktionszeiger nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531379</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:48:11 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Das geht nicht. Die eine Member-Variante hat implizit this als Argument mit drin, die globale nicht. Wozu willst Du das denn machen?<br />
Beschreib doch mal, was Du damit genau bezwecken willst.</p>
</blockquote>
<p>der globalen werde ich die doch als Argument zuweisen...</p>
<p>Zweck:<br />
die optimierungsmethode braucht einen funktionszeiger auf die Zeilfunktion<br />
hat den type double(*)(vector&lt;double&gt;)<br />
aufruf mit optimize(double(*f)(vector&lt;double&gt;))</p>
<p>in meiner klasse mit dem optimierungsproblem ist die Zielfunktion definiert<br />
mit double (*Class::func)(vector&lt;double&gt;)</p>
<p>opmtimize(func) klappt nicht wegen &quot;class::&quot;</p>
<p>deswegen habe ich die globale funktion genommen, die braucht aber einige memberargumente, so dass ich der globalen funktion einfach noch alles mitgebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531383</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:58:41 GMT]]></title><description><![CDATA[<p>gutentagservus schrieb:</p>
<blockquote>
<p>der globalen werde ich die doch als Argument zuweisen...</p>
</blockquote>
<p>Wozu was nachbauen, was Dir C++ eh schon liefert?</p>
<p>Ich verstehe aus Deiner Beschreibung heraus nicht im geringsten, was Du vor hast. Bitte mal ganz genau beschrieben, und vielleicht mal etwas <em>ordentlichen, kommentierten</em> Code zeigen, der es vielleicht etwas klarer macht.</p>
<p>Welche Funktionen gibt es schon? Willst Du eine global existierende Optimierungsfunktion</p>
<pre><code class="language-cpp">double optimize(const vector&lt;double&gt;&amp; vec)
{
   //do optimizations
}
</code></pre>
<p>Sollen irgendwelche Member-Methoden aus Klassen irgendwie global zur Optimierung von irgendwas zur Verfügung gestellt werden? So wird nichts klarer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531387</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:58:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:55:47 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Das erklärt es noch nicht. Wozu brauchst Du denn die Funktion mit dem reinen Double-Argument? Vor allem, wenn es IN der Klasse benutzt werden soll?<br />
Und wieso als Funktionszeiger? In Deinem Beispiel ist es fest eingebrannt. Da bringt ein Funktionszeiger nichts.</p>
</blockquote>
<p>IN der klasse wird nur der funktionszeiger definiert und danach dem optimierer zugewiesen. der optimierer arbeitet dann ne weile allein und ruft die funktion über den zeiger immer wieder auf.</p>
<p>auf globale funktion greift der optimierer ohne probleme zu und da funzt alles,<br />
wenn ich mehrere probleme hab mit jeweils dazugehörigen zielfunktionen will ich für jedes problem eine klasse haben und in jeder klasse ein zielfunktion als member methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531388</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 09:55:55 GMT]]></title><description><![CDATA[<p>Warum du das machen willst, geht daraus immer noch nicht hervor. Sowas ist zwar möglich umzusetzen, aber irgendwie erscheint es mir eher ein Designfehler zu sein.</p>
<p>Wieso übergibst du der Funktion optimize nicht einfach einen Zeiger oder eine Referenz auf dein Objekt?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531389</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 18 Jun 2008 09:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 10:13:06 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Warum du das machen willst, geht daraus immer noch nicht hervor. Sowas ist zwar möglich umzusetzen, aber irgendwie erscheint es mir eher ein Designfehler zu sein.</p>
<p>Wieso übergibst du der Funktion optimize nicht einfach einen Zeiger oder eine Referenz auf dein Objekt?</p>
<p>Grüssli</p>
</blockquote>
<p>diplomarbeit...<br />
es wird eine optimierungsbilbliothek.</p>
<p>ich habe 3 fertige optimierer(freeware, sourcecode)<br />
die brauchen jeweils nur die zielfunktion.</p>
<p>wenn es jetzt nicht klappt dann werde ich denen wie du sagst eine Referenz auf mein objekt übergeben. kostet wieder zeit.</p>
<p>bis jetzt habe ich in der main.cpp immer globale objekte für die optimierungsprobleme erzeugt,</p>
<pre><code class="language-cpp">Optproblem obj; //vor der main

//obj-&gt;zielfkt(x) liefert nen double;
</code></pre>
<p>dann habe ich extra globale funktion geschrieben<br />
vor der main</p>
<pre><code class="language-cpp">double f(x)
{
  return obj-&gt;zielfkt(x);
}
</code></pre>
<p>dann in der main</p>
<pre><code class="language-cpp">double(*func)(vector&lt;double&gt;) = f;
opimize(..., func);
</code></pre>
<p>vorstellen tue ich mir das ganze so</p>
<p>[cpp]<br />
double(<em>func)(vector&lt;double&gt; x) = obj-&gt;zielfkt(x);<br />
//matcht er nicht,<br />
//weil zielkft double(<strong>OptProblem::</strong></em>)(vector&lt;double&gt; x) ist</p>
<p>optimize(..., func);<br />
[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531396</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 10:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 10:29:34 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Welche Funktionen gibt es schon? Willst Du eine global existierende Optimierungsfunktion</p>
<pre><code class="language-cpp">double optimize(const vector&lt;double&gt;&amp; vec)
{
   //do optimizations
}
</code></pre>
<p>Sollen irgendwelche Member-Methoden aus Klassen irgendwie global zur Optimierung von irgendwas zur Verfügung gestellt werden? So wird nichts klarer.</p>
</blockquote>
<p>ich glaube &quot;global&quot; irritiert hier ein wenig.</p>
<p>hab einen otpimierer OPT</p>
<p>der kann optimieren mit</p>
<pre><code class="language-cpp">vector&lt;double&gt; OPT::do_it(const vector&lt;double&gt;&amp; startparameter, double(*func)(vector&lt;double&gt;))
</code></pre>
<p>und gibt dann den optimierten vektor zurück</p>
<p>ich habe problemmklassen</p>
<pre><code class="language-cpp">ProbClass prob;

prob-&gt;zielfkt(vector&lt;double&gt; x) //gibt double
</code></pre>
<p>zum optimieren starte ich</p>
<pre><code class="language-cpp">OPT::do_it(prob-&gt;getstartparameter, prob-&gt;zielfkt)
</code></pre>
<p>und hier das matchproblem<br />
func vs. prob-&gt;zielfkt<br />
bzw.<br />
double(<em>)(vector&lt;double&gt;) vs. double(ProbClass::</em>)(vector&lt;double&gt;)</p>
<p>um dieses ProbClass:: wegzubekommen nehme ich eine globale funktion</p>
<pre><code class="language-cpp">double global(ProbClass *obj, vector&lt;double&gt; x)
{
   return obj-&gt;zielfkt(x);
}
</code></pre>
<p>bis hierhin klappt alles...<br />
dann brauche ich für den optiemierer den benötigten fktzeiger<br />
double(*func)(vector&lt;double&gt;)=global(this, vector&lt;double&gt;)<br />
gibt es sowas, dass man fktzeiger auf funktion mit einer<br />
variable auf funktion mit 2 variablen umleitet und eine variable<br />
dabei belegt so dass wieder nur eine variable bleibt...<br />
<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="😕"
    /> <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="😕"
    /> <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/1531406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531406</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 10:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 10:33:16 GMT]]></title><description><![CDATA[<p>ich glaube ich fange schon mal mit der objektübergabe an... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
p.s.<br />
es geht doch nur um das matchen von funktionen...<br />
alles andere ist überflüssig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531407</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 10:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 10:41:58 GMT]]></title><description><![CDATA[<p>Das geht nicht. Du musst wohl oder übel das Interface Deines Optimierers so ändern, dass es eine Optimierungsproblem-Refferenz/Objekt übernimmt.</p>
<p>Du kannst Funktionen nicht &quot;matchen&quot;. Funktionszeiger können nur auf Funktionen zeigen, die ein identisches Iterface haben, und <code>double (MyClass, vector&lt;T&gt;) != double (vector&lt;T&gt;)</code> . Egal, wie Du es wendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531415</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 18 Jun 2008 10:41:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 11:04:42 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Das geht nicht. Du musst wohl oder übel das Interface Deines Optimierers so ändern, dass es eine Optimierungsproblem-Refferenz/Objekt übernimmt.</p>
<p>Du kannst Funktionen nicht &quot;matchen&quot;. Funktionszeiger können nur auf Funktionen zeigen, die ein identisches Iterface haben, und <code>double (MyClass, vector&lt;T&gt;) != double (vector&lt;T&gt;)</code> . Egal, wie Du es wendest.</p>
</blockquote>
<p>alles klar... danke.</p>
<p>p.s. diese match-option muss dann aber trotzdem in c++ eingeführt werden <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/1531436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531436</guid><dc:creator><![CDATA[gutentagservus]]></dc:creator><pubDate>Wed, 18 Jun 2008 11:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 11:26:13 GMT]]></title><description><![CDATA[<p>gutentagservus schrieb:</p>
<blockquote>
<p>p.s. diese match-option muss dann aber trotzdem in c++ eingeführt werden <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>Bin ich nicht der Meinung. Ein Methodenzeiger besteht nunmal aus zwei Komponenten und nicht nur einer wie bei einem Funktionszeiger. Wobei du dir durchaus mal die folgenden Bereiche ansehen könntest boost::bind + boost::function...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531456</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 11:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsargument on Wed, 18 Jun 2008 11:29:04 GMT]]></title><description><![CDATA[<p>Dann nutze Funktionsobjekte statt Funktionszeigern - natürlich auch in der Funktion, die den Funktionszeiger erwartet.</p>
<pre><code class="language-cpp">#include &lt;tr1/function&gt;
using namespace std::tr1;

function&lt; double ( std::vector&lt;double&gt; const&amp; ) &gt; func = bind( &amp;klasse::methode, &amp;objektVonKlasse, placeholders::_1 );

std::vector&lt; double &gt; vec;
func( vec );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1531461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531461</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 18 Jun 2008 11:29:04 GMT</pubDate></item></channel></rss>