<?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[Template Memberfunktion spezialisieren]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich stehe gerade auf dem Schlauch <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="😕"
    /> .<br />
Bin gerade dabei eine allgemeine Optimierungsklasse zu schreiben.</p>
<pre><code class="language-cpp">template &lt;typename RT, typename AT&gt;
class CSolverGradient : public virtual CSolverBasis&lt;RT, AT&gt;
{
private:

	//Gradient numerisch
	AT berechne_gradienten(const AT &amp; apunkt);

	//neuen Punkt bestimmen
	AT berechne_neuen_optimalpunkt(const AT &amp; apunkt, const AT &amp; agrad);

public:

	//Konstruktoren
	CSolverGradient(){};

	CSolverGradient(const CSFBasis&lt;RT, AT&gt; * afunktor):CSolverBasis(afunktor) {};

	//Destruktor
	virtual ~CSolverGradient(){};

	//Solver starten
	virtual void loese(const AT &amp; astartwert);
};
</code></pre>
<p>Wenn ich jetzt die Funktionen berechne_gradienten und berechne_neuen_optimalpunkt für einen Rückgabewert (RT) double und einen Argumenttyp (AT) vector&lt;double&gt; spezialisieren will, muss ich dann das komplette Template spezialisieren?</p>
<p>Könnt ihr mir auf die schnelle weiterhelfen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150023/template-memberfunktion-spezialisieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 12:03:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150023.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jun 2006 13:29:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Mon, 12 Jun 2006 13:29:11 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich stehe gerade auf dem Schlauch <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="😕"
    /> .<br />
Bin gerade dabei eine allgemeine Optimierungsklasse zu schreiben.</p>
<pre><code class="language-cpp">template &lt;typename RT, typename AT&gt;
class CSolverGradient : public virtual CSolverBasis&lt;RT, AT&gt;
{
private:

	//Gradient numerisch
	AT berechne_gradienten(const AT &amp; apunkt);

	//neuen Punkt bestimmen
	AT berechne_neuen_optimalpunkt(const AT &amp; apunkt, const AT &amp; agrad);

public:

	//Konstruktoren
	CSolverGradient(){};

	CSolverGradient(const CSFBasis&lt;RT, AT&gt; * afunktor):CSolverBasis(afunktor) {};

	//Destruktor
	virtual ~CSolverGradient(){};

	//Solver starten
	virtual void loese(const AT &amp; astartwert);
};
</code></pre>
<p>Wenn ich jetzt die Funktionen berechne_gradienten und berechne_neuen_optimalpunkt für einen Rückgabewert (RT) double und einen Argumenttyp (AT) vector&lt;double&gt; spezialisieren will, muss ich dann das komplette Template spezialisieren?</p>
<p>Könnt ihr mir auf die schnelle weiterhelfen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076237</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Mon, 12 Jun 2006 13:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Mon, 12 Jun 2006 14:52:39 GMT]]></title><description><![CDATA[<p>KeineAhnung78 schrieb:</p>
<blockquote>
<p>Wenn ich jetzt die Funktionen berechne_gradienten und berechne_neuen_optimalpunkt für einen Rückgabewert (RT) double und einen Argumenttyp (AT) vector&lt;double&gt; spezialisieren will, muss ich dann das komplette Template spezialisieren?</p>
</blockquote>
<p>Erstmal: die beiden angesprochenen Funktionen haben AT als Rückgabewert. D.h. Argument- und Rückgabetyp der Spezialisierungen müssen gleich sein. Wenn du wirklich double und std::vector haben willst, musst du den Rückgabewert auf RT ändern.<br />
Dann geht's so:</p>
<pre><code class="language-cpp">template &lt;class R, class A&gt;
R CSolverGradient&lt;R, A&gt;::berechne_gradienten(const A&amp; ) {
   // generische Impl
}

template &lt;&gt;
double CSolverGradient&lt;double,std::vector&lt;double&gt; &gt;::berechne_gradienten(const std::vector&lt;double&gt;&amp; ) {
 // Spezialisierung
 return 1.0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1076291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076291</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 12 Jun 2006 14:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Mon, 12 Jun 2006 15:33:15 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>allerdings sollte der Rueckgabetyp bei den beiden Funktionen auch im allgemeinen Fall AT sein. Der Typ RT spielt in diesen beiden Funktionen gar keine Rolle.</p>
<p>Wenn ich zwei Funktionen schreibe</p>
<pre><code class="language-cpp">AT berechne_gradienten(const AT &amp; apunkt);
double berechne_gradienten(const std::vector&lt;double&gt; &amp; apunkt);
</code></pre>
<p>bekomme ich die Fehlermeldung, dass sie sich nur bezüglich des Rückgabewertes unterscheiden.</p>
<p>Ich habe es jetzt so gelöst, dass ich nur die spezielle Funktion implementiere. Allerdings hätte ich die allgemeine schon sehr gerne um eine Exception auszuwerfen, wenn versucht wird, andere Datentypen zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076336</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Mon, 12 Jun 2006 15:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Tue, 13 Jun 2006 08:45:17 GMT]]></title><description><![CDATA[<p>KeineAhnung78 schrieb:</p>
<blockquote>
<p>Wenn ich zwei Funktionen schreibe</p>
<pre><code class="language-cpp">AT berechne_gradienten(const AT &amp; apunkt);
double berechne_gradienten(const std::vector&lt;double&gt; &amp; apunkt);
</code></pre>
<p>bekomme ich die Fehlermeldung, dass sie sich nur bezüglich des Rückgabewertes unterscheiden.</p>
</blockquote>
<p>Welchen Compiler verwendest du? Die Variante ist nämlich durchaus legal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076723</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 13 Jun 2006 08:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Tue, 13 Jun 2006 10:26:11 GMT]]></title><description><![CDATA[<p>Sorry, die Fehlermeldung lautet etwas anders (bezieht sich auf die Zeile der spezialisierten Funktion):</p>
<p>member function already defined or declared.</p>
<p>Compiler VC8</p>
<p><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/1076792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076792</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Tue, 13 Jun 2006 10:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Tue, 13 Jun 2006 11:38:14 GMT]]></title><description><![CDATA[<p>Innerhalb einer Template-Klasse kannst du keine Funktion überladen, die die selben Parameter hat, wie die übergebenen Template-Parameter, denn woher soll der Compiler dann wissen, welche Funktion er ausführen soll.</p>
<p>HumeSikkins hat ja geschrieben, daß du Template-Methoden verwenden sollst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076826</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 13 Jun 2006 11:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Template Memberfunktion spezialisieren on Tue, 13 Jun 2006 14:40:19 GMT]]></title><description><![CDATA[<blockquote>
<p>HumeSikkins hat ja geschrieben, daß du Template-Methoden verwenden sollst.</p>
</blockquote>
<p>Alles palletti. Hab ja zusätzlich die spezialisierten Funktionen noch deklariert. Das geht nicht. Hab´s verstanden. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076941</guid><dc:creator><![CDATA[KeineAhnung78]]></dc:creator><pubDate>Tue, 13 Jun 2006 14:40:19 GMT</pubDate></item></channel></rss>