<?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[Kombination von statischem und dynamischem Polymorphismus]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Klassentemplate (Klasse A) mit Spezialisierungen von Memberfunktionen für verschiedene Datentypen.<br />
Diese Spezialisierungen führen alle den selben Code für die unterschiedlichen Datentypen aus. Das klappt soweit - allerdings soll das ganze jetzt erweitert werden:</p>
<p>Das Motto lautet ja: Kapseln, was variiert.<br />
Es variiert der Code in den spezialisierten Funktionen.</p>
<p>Leider können Memberfunktionen von Klassentemplates nicht partiell spezialisiert werden - deshalb denke ich an eine Interface-Klasse, von der die einzelnen nun gewünschten Berechnungsvarianten abgeleitet sind.</p>
<p>Geht das, oder gibt es andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200089/kombination-von-statischem-und-dynamischem-polymorphismus</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 02:21:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200089.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Dec 2007 17:11:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kombination von statischem und dynamischem Polymorphismus on Mon, 10 Dec 2007 17:11:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Klassentemplate (Klasse A) mit Spezialisierungen von Memberfunktionen für verschiedene Datentypen.<br />
Diese Spezialisierungen führen alle den selben Code für die unterschiedlichen Datentypen aus. Das klappt soweit - allerdings soll das ganze jetzt erweitert werden:</p>
<p>Das Motto lautet ja: Kapseln, was variiert.<br />
Es variiert der Code in den spezialisierten Funktionen.</p>
<p>Leider können Memberfunktionen von Klassentemplates nicht partiell spezialisiert werden - deshalb denke ich an eine Interface-Klasse, von der die einzelnen nun gewünschten Berechnungsvarianten abgeleitet sind.</p>
<p>Geht das, oder gibt es andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1418272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418272</guid><dc:creator><![CDATA[jensen_81]]></dc:creator><pubDate>Mon, 10 Dec 2007 17:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kombination von statischem und dynamischem Polymorphismus on Mon, 10 Dec 2007 21:42:44 GMT]]></title><description><![CDATA[<p>Policy-Klassen:</p>
<pre><code class="language-cpp">template &lt;typename T, typename MyPolicy&gt;
class A : public MyPolicy
{
  ...
  void myFunc()
  {
    myPolicyFunc();
  }
};
</code></pre>
<p>Und wenn MyPolicy von T abhängt, template template Parameter verwenden.</p>
<p>PS: IdR werden Fragen mit kleinen Beispielen schneller, häufiger und klarer beantwortet <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1418449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1418449</guid><dc:creator><![CDATA[deha]]></dc:creator><pubDate>Mon, 10 Dec 2007 21:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Kombination von statischem und dynamischem Polymorphismus on Mon, 31 Dec 2007 10:50:51 GMT]]></title><description><![CDATA[<p>deha schrieb:</p>
<blockquote>
<p>PS: IdR werden Fragen mit kleinen Beispielen schneller, häufiger und klarer beantwortet <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>
</blockquote>
<p>Da hast Du recht :), deshalb hier mein Beispiel:</p>
<p>Das ist die Template-Klasse:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Builder_NR : public Builder_HG
{
public:
        ...

        void Build_HG();

        T vtPv;
};
</code></pre>
<p>Und hier die Deklarationen der spezialisierten Funktion:</p>
<pre><code class="language-cpp">template &lt;&gt; 
void Builder_NR&lt;FF&gt;::Build_HG();

template &lt;&gt; 
void Builder_NR&lt;FB&gt;::Build_HG();

template &lt;&gt; 
void Builder_NR&lt;BF&gt;::Build_HG();

template &lt;&gt; 
void Builder_NR&lt;BB&gt;::Build_HG();
</code></pre>
<p>Für den Typ FF sieht die Funktion so aus:</p>
<pre><code class="language-cpp">template &lt;&gt; 
void Builder_NR&lt;FF&gt;::Build_HG()
{

	calc_vtPv();

	// build hesse-matrix (pN) and gradient (rhs)
	for ( unsigned int i = 0; i &lt; u; i++ )
	{
		(*prhs_)(i,0) = -vtPv.d(i).x();
		for ( unsigned int j = 0; j &lt; u; j++ )
		{
                 	(*pN_)(i,j) = vtPv.d(i).d(j);
		}
	}

	test_hesse();
}
</code></pre>
<p>Die Funktion</p>
<pre><code class="language-cpp">calc_vtPv();
</code></pre>
<p>ist Member von</p>
<pre><code class="language-cpp">Builder_NR
</code></pre>
<p>und soll nun ebenfalls für verschiede Typen spezialisiert werden.</p>
<p>Policy-Klassen sind recht kompliziert finde ich - deshalb habe ich die Antwort oben nicht recht umsetzen können..</p>
<p>Euch einen guten Rutsch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428458</guid><dc:creator><![CDATA[jensen_81]]></dc:creator><pubDate>Mon, 31 Dec 2007 10:50:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kombination von statischem und dynamischem Polymorphismus on Mon, 31 Dec 2007 14:56:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class FF_Policy 
{
  ...

  void Build_HG() { ... }

  FF vtPv;
};

//more Policies

template &lt;class Policy&gt;
class Builder_NR : public Builder_HG, private Policy
{
  ... //use Policy here, i.e. Build_HG(), vtPv
};
</code></pre>
<p>und calc_vtPv(): Entweder in die vorhandenen Policies oder einen weiteren Template-Parameter hinzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428600</guid><dc:creator><![CDATA[deha]]></dc:creator><pubDate>Mon, 31 Dec 2007 14:56:26 GMT</pubDate></item></channel></rss>