<?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[suche design pattern für mein problem]]></title><description><![CDATA[<p>also ich habe eine klasse welche irgendwelche warscheinlichkeiten aufgrund<br />
eingabedaten berechnet, z.B.</p>
<pre><code class="language-cpp">class ProbCalc
{
 virtual double calcProbs(const Vector&lt;float&gt;&amp; input) = 0;
};
</code></pre>
<p>ich möchte nun sowas wie einen prob-calculator, bei dem man<br />
aber dynamisch die Art der Berechnung setzen kann, also in etwa so</p>
<pre><code class="language-cpp">class Calc
{

void setCalculator(const ProbCalc&amp; calc);

};
</code></pre>
<p>kann mir mal jemand eine link geben, wie man sowas implementiert?<br />
Ich kann zwar stupide rangehen und sowas machen :</p>
<pre><code class="language-cpp">class Calc
{

void setCalculator(ProbCalc&amp; calc)
{
m_calc = &amp;calc;
}

double calc(const Vector&lt;float&gt;&amp; input)
{
return m_calc-&gt;calc(input);
}

private :

ProbCalc * m_calc;
};
</code></pre>
<p>aber das ist mehr als unschön (lebenszeit von beidem usw),<br />
der calc in setCalculator(ProbCalc&amp; calc) soll übrigens kopiert werden,<br />
damit niemand später an den parametern rumspielt, deshalb bringt mich<br />
shared_ptr irgendwie auch nicht weiter, ich hab mir das so gedacht</p>
<pre><code class="language-cpp">void setCalculator(const ProbCalc&amp; calc)
{
if(m_calc) { delete m_calc; }
m_calc = new ProbCalc(calc);
}
</code></pre>
<p>würde mich über vorschläge freuen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204684/suche-design-pattern-für-mein-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 17:16:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204684.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Feb 2008 01:17:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 01:17:03 GMT]]></title><description><![CDATA[<p>also ich habe eine klasse welche irgendwelche warscheinlichkeiten aufgrund<br />
eingabedaten berechnet, z.B.</p>
<pre><code class="language-cpp">class ProbCalc
{
 virtual double calcProbs(const Vector&lt;float&gt;&amp; input) = 0;
};
</code></pre>
<p>ich möchte nun sowas wie einen prob-calculator, bei dem man<br />
aber dynamisch die Art der Berechnung setzen kann, also in etwa so</p>
<pre><code class="language-cpp">class Calc
{

void setCalculator(const ProbCalc&amp; calc);

};
</code></pre>
<p>kann mir mal jemand eine link geben, wie man sowas implementiert?<br />
Ich kann zwar stupide rangehen und sowas machen :</p>
<pre><code class="language-cpp">class Calc
{

void setCalculator(ProbCalc&amp; calc)
{
m_calc = &amp;calc;
}

double calc(const Vector&lt;float&gt;&amp; input)
{
return m_calc-&gt;calc(input);
}

private :

ProbCalc * m_calc;
};
</code></pre>
<p>aber das ist mehr als unschön (lebenszeit von beidem usw),<br />
der calc in setCalculator(ProbCalc&amp; calc) soll übrigens kopiert werden,<br />
damit niemand später an den parametern rumspielt, deshalb bringt mich<br />
shared_ptr irgendwie auch nicht weiter, ich hab mir das so gedacht</p>
<pre><code class="language-cpp">void setCalculator(const ProbCalc&amp; calc)
{
if(m_calc) { delete m_calc; }
m_calc = new ProbCalc(calc);
}
</code></pre>
<p>würde mich über vorschläge freuen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450201</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Wed, 06 Feb 2008 01:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 07:52:25 GMT]]></title><description><![CDATA[<p>Funktionspointer kommen nicht in Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450232</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 06 Feb 2008 07:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 08:22:16 GMT]]></title><description><![CDATA[<p>ich denke was du suchst, heißt STrategy-Pattern. Ist aber eigentlich so implementiert wie dus hier schon zeigst.</p>
<p>im magazin steht zB was dazu (artikel über design patterns)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450256</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 06 Feb 2008 08:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 10:16:24 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass du ProbCalc als abstrakte Klasse weder direkt instanziieren noch kopieren kannst. Mir fallen jetzt zwei Alternativen ein:</p>
<pre><code class="language-cpp">class ProbCalc {
private:
  virtual ProbCalc* clone() const = 0;
};

class Calc
{
void setCalculator(ProbCalc const&amp; calc)
{ p_calc.reset(calc.clone()); }

double calc(const Vector&lt;float&gt;&amp; input)
{ return p_calc-&gt;calc(input); }

private :
auto_ptr&lt;ProbCalc&gt; p_calc;
};
</code></pre>
<p>Damit hättest du allerdings ein Objekt außerhalb von Calc, für das du zuständig bist und vermutlich garnicht brauchst, und müsstest außerdem noch für alle PobCalc-Abkömmlinge eine clone-Funktion schreiben. Alternative daher:</p>
<pre><code class="language-cpp">class Calc
{
void setCalculator(ProbCalc* pcalc)
{ p_calc.reset(pcalc); }

double calc(const Vector&lt;float&gt;&amp; input)
{ return p_calc-&gt;calc(input); }

private :
auto_ptr&lt;ProbCalc&gt; p_calc;
};

int main() 
{
  Calc myCalc;
  myCalc.setCalculator(new FunnyProbCalc(&quot;haha&quot;));
  myCalc.setCalculator(new OtherProbCalc(2.4, 3));
}
</code></pre>
<p>hier übernimmt Calc die Kontrolle über einen dynamisch erzeugten ProbCalc-Abkömmling, kümmert sich um dessen Zerstörung usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450364</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 10:40:40 GMT]]></title><description><![CDATA[<p>Das Problem mit Funktionspointern wäre wieder,<br />
das der Calculator das Benutzende Object überleben müsste,</p>
<p>aber ich denke ich hab nun alles soweit verinnerlicht, das ich es implementieren<br />
kann, danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450389</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to suche design pattern für mein problem on Wed, 06 Feb 2008 10:56:27 GMT]]></title><description><![CDATA[<p>Das Problem würde nicht bestehen, wenn die unterschiedlichen Berechnungsarten statisch wären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450406</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:56:27 GMT</pubDate></item></channel></rss>