<?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[Memberfunktionen spezialisieren]]></title><description><![CDATA[<p>Kann man in C++ (oder zumindest C++0x) Memberfunktionen spezialisieren, bzw. ist der folgende Code standardkonform?</p>
<pre><code class="language-cpp">class Foo {
public:
    template&lt;typename T&gt;
    T&amp; Bar(char c) {/*...*/}

    template&lt;&gt;
    double&amp; Bar&lt;double&gt;(char c) {/*...*/}

    template&lt;&gt;
    int&amp; Bar&lt;int&gt;(char c) {/*...*/}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/279429/memberfunktionen-spezialisieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 13:29:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279429.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Dec 2010 19:33:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 19:33:48 GMT]]></title><description><![CDATA[<p>Kann man in C++ (oder zumindest C++0x) Memberfunktionen spezialisieren, bzw. ist der folgende Code standardkonform?</p>
<pre><code class="language-cpp">class Foo {
public:
    template&lt;typename T&gt;
    T&amp; Bar(char c) {/*...*/}

    template&lt;&gt;
    double&amp; Bar&lt;double&gt;(char c) {/*...*/}

    template&lt;&gt;
    int&amp; Bar&lt;int&gt;(char c) {/*...*/}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1999092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999092</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 19:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 19:48:57 GMT]]></title><description><![CDATA[<p>Spezialisieren kann man sie auf jeden Fall, ich vermute auch, dass dein Code standardkonform ist, und zwar nicht nur C++0x.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999096</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 26 Dec 2010 19:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 19:55:28 GMT]]></title><description><![CDATA[<p>Sicher?</p>
<p>Ich meine gehört zu haben, dass es nicht standardkonform sei. MSVC schluckts, aber GCC?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999099</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 19:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:01:59 GMT]]></title><description><![CDATA[<p>Sicher bin ich nicht, der GCC schluckt es nur, wenn du die Spezialisierungen außerhalb der Klassendefinition aufschreibst.<br />
Ich habe aber ISO-Warnungen angeschaltet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999101</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:11:56 GMT]]></title><description><![CDATA[<p>Du meinst sowas?</p>
<pre><code class="language-cpp">class Foo {
public:
    template&lt;typename T&gt;
    T&amp; Bar(char c) {/*...*/}
};

template&lt;&gt;
double&amp; Foo::Bar&lt;double&gt;(char c) {/*...*/}

template&lt;&gt;
int&amp; Foo::Bar&lt;int&gt;(char c) {/*...*/}
</code></pre>
<p>Wusste garnicht, dass das (zumindest unter MSVC) geht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999106</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:20:11 GMT]]></title><description><![CDATA[<p>ttttt schrieb:</p>
<blockquote>
<p>Du meinst sowas?</p>
<pre><code class="language-cpp">class Foo {
public:
    template&lt;typename T&gt;
    T&amp; Bar(char c) {/*...*/}
};

template&lt;&gt;
double&amp; Foo::Bar&lt;double&gt;(char c) {/*...*/}

template&lt;&gt;
int&amp; Foo::Bar&lt;int&gt;(char c) {/*...*/}
</code></pre>
<p>Wusste garnicht, dass das (zumindest unter MSVC) geht...</p>
</blockquote>
<p>Ja, das meinte ich. Du solltest die Implementation dieser Spezialisierungen sogar in die C++-Datei auslagern, weil sie nicht mehr von einem Template-Parameter abhängig sind und daher nicht static gemacht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999111</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:20:11 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:31:44 GMT]]></title><description><![CDATA[<p>Unter MSVC kann man diese Spezialisierungen in der Klasse deklarieren. Dann erlaubt der Linker es allerdings nicht, diese Spezialisierungen in der Sourcedatei zu definieren.<br />
Aber egal - Diese Deklaration ist ja (komischerweise, finde ich, das müsste bei dlls/shared objects doch problematisch werden, oder?) anscheinend garnicht notwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999120</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:36:02 GMT]]></title><description><![CDATA[<p>ttttt schrieb:</p>
<blockquote>
<p>Unter MSVC kann man diese Spezialisierungen in der Klasse deklarieren. Dann erlaubt der Linker es allerdings nicht, diese Spezialisierungen in der Sourcedatei zu definieren.<br />
Aber egal - Diese Deklaration ist ja (komischerweise, finde ich, das müsste bei dlls/shared objects doch problematisch werden, oder?) anscheinend garnicht notwendig.</p>
</blockquote>
<p>Das musst du genauer erklären.</p>
<p>Das sollte der MSVC aber kompilieren, oder? (nicht getestet, Leichtsinnsfehler nicht ausgeschlossen):</p>
<pre><code class="language-cpp">//Header

template&lt;typename T&gt; class Foo
{
public:
    T Bar(char c);
}

template&lt;&gt; double Foo&lt;double&gt;::Bar(char c);
</code></pre>
<pre><code class="language-cpp">//C++-Datei
template&lt;&gt; double Foo&lt;double&gt;::Bar(char c)
{
    //...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1999124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999124</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 20:59:50 GMT]]></title><description><![CDATA[<p>Sowas wird nicht gelinkt (undefined reference), wenn der zweite Codeschnipsel in einer .cpp-Datei steht:</p>
<pre><code class="language-cpp">class Foo {
    template&lt;typename T&gt;
    T&amp; Bar();
    template&lt;&gt;
    double Bar&lt;double&gt;();
};
</code></pre>
<pre><code class="language-cpp">template&lt;&gt;
double Foo::Bar&lt;double&gt;() {return(0.1);}
</code></pre>
<p>D.h. die Spezialisierung darf nicht deklariert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999131</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 20:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 21:08:49 GMT]]></title><description><![CDATA[<p>Hm, GCC gibt keinen Error aus, nur Warnungen wegen mehrfacher Deklaration. Hab jetzt aber auch nur eine C++-Datei.<br />
Wenn die Spezialisierung im Header nicht deklariert wird, kann sie aber nur in einer Datei verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999134</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 26 Dec 2010 21:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Sun, 26 Dec 2010 21:11:33 GMT]]></title><description><![CDATA[<p>Kann(Muss) man sie nun im Header deklarieren oder nicht? Wenn ja, wie? (standardkonform)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999136</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Sun, 26 Dec 2010 21:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Mon, 27 Dec 2010 07:38:59 GMT]]></title><description><![CDATA[<p>Das weiß ich nicht. Sieht aber nach den GCC-Warnungen nicht so aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999186</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 27 Dec 2010 07:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Mon, 27 Dec 2010 15:54:40 GMT]]></title><description><![CDATA[<p>Moment mal: Warum machst du das nicht einfach anders?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; class FooBase {...};

template&lt;typename T&gt; class Foo : public FooBase&lt;T&gt;
{
public:
    T Bar(char c){...}
};

template&lt;&gt; class Foo&lt;double&gt; : public FooBase&lt;double&gt;
{
public:
    double Bar(char c){...}
};
</code></pre>
<p>In C++0x geht vielleicht auch meine alte Lösung mit</p>
<pre><code class="language-cpp">extern template&lt;&gt; double Foo&lt;double&gt;::Bar();
</code></pre>
<p>bei der Deklaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999333</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 27 Dec 2010 15:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Memberfunktionen spezialisieren on Mon, 27 Dec 2010 16:55:54 GMT]]></title><description><![CDATA[<p>Weil das vom Verhalten für den Nutzer der Klasse völlig anders ist... Ich möchte in diesem Fall z.B. eine Instanz der Klasse erzeugen, auf die alle verschiedenen Spezialisierungen der Memberfunktion angewendet werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999362</guid><dc:creator><![CDATA[ttttt]]></dc:creator><pubDate>Mon, 27 Dec 2010 16:55:54 GMT</pubDate></item></channel></rss>