<?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[Methodenüberladung in Template-Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Template-Klassen</p>
<pre><code class="language-cpp">template&lt;class N&gt; class A
{
public:
	virtual vector&lt;N*&gt; unspec_nodes() const = 0;
	...
};

template&lt;class N, class ON&gt; class B : public virtual A&lt;N&gt;
{
public:
	vector&lt;ON*&gt; nodes() const;
	vector&lt;N*&gt; unspec_nodes() const;
	...
};
</code></pre>
<p>Das Problem ist nun, dass ich in der Klasse B</p>
<ul>
<li>eine Methode nodes() habe, die bestimmte Knoten zurückgibt, und</li>
<li>eine Methode unspec_nodes(), die dieselben Knoten zurückgibt, aber als unspezifische Knoten (ON ist aus N abgeleitet).</li>
</ul>
<p>Ich frage mich nun, ob man die Benennung der Methoden konsistenter machen kann, dass ich statt</p>
<pre><code class="language-cpp">B&lt;C_N, C_ON&gt; b;
b-&gt;nodes();
b-&gt;unspec_nodes()
</code></pre>
<p>irgendwas verständlicheres in der Richtung</p>
<pre><code class="language-cpp">B&lt;C_N, C_ON&gt; b;
b-&gt;nodes&lt;C_N&gt;();
b-&gt;nodes&lt;C_ON&gt;();
</code></pre>
<p>schreiben kann.</p>
<p>Was ist eurer Meinung, die beste Technik hierfür?</p>
<p>Anmerkung: Diese Anfrage ist eine Fortsetzung des Beitrags <a href="http://www.c-plusplus.net/forum/277511" rel="nofollow">http://www.c-plusplus.net/forum/277511</a> , der inzwischen etwas unübersichtlich ist und daher als neuer Beitrag fortgesetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277796/methodenüberladung-in-template-klassen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 14:44:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277796.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Nov 2010 14:46:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Wed, 24 Nov 2010 14:46:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe zwei Template-Klassen</p>
<pre><code class="language-cpp">template&lt;class N&gt; class A
{
public:
	virtual vector&lt;N*&gt; unspec_nodes() const = 0;
	...
};

template&lt;class N, class ON&gt; class B : public virtual A&lt;N&gt;
{
public:
	vector&lt;ON*&gt; nodes() const;
	vector&lt;N*&gt; unspec_nodes() const;
	...
};
</code></pre>
<p>Das Problem ist nun, dass ich in der Klasse B</p>
<ul>
<li>eine Methode nodes() habe, die bestimmte Knoten zurückgibt, und</li>
<li>eine Methode unspec_nodes(), die dieselben Knoten zurückgibt, aber als unspezifische Knoten (ON ist aus N abgeleitet).</li>
</ul>
<p>Ich frage mich nun, ob man die Benennung der Methoden konsistenter machen kann, dass ich statt</p>
<pre><code class="language-cpp">B&lt;C_N, C_ON&gt; b;
b-&gt;nodes();
b-&gt;unspec_nodes()
</code></pre>
<p>irgendwas verständlicheres in der Richtung</p>
<pre><code class="language-cpp">B&lt;C_N, C_ON&gt; b;
b-&gt;nodes&lt;C_N&gt;();
b-&gt;nodes&lt;C_ON&gt;();
</code></pre>
<p>schreiben kann.</p>
<p>Was ist eurer Meinung, die beste Technik hierfür?</p>
<p>Anmerkung: Diese Anfrage ist eine Fortsetzung des Beitrags <a href="http://www.c-plusplus.net/forum/277511" rel="nofollow">http://www.c-plusplus.net/forum/277511</a> , der inzwischen etwas unübersichtlich ist und daher als neuer Beitrag fortgesetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985181</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 24 Nov 2010 14:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Wed, 24 Nov 2010 16:49:27 GMT]]></title><description><![CDATA[<p>Das kannst du mit Spezialisierung lösen.</p>
<p><code>C_N</code> und <code>C_ON</code> sind dann einfach Parameter für Spezialisierungen der gleichen Funktion <code>nodes</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985254</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 24 Nov 2010 16:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 09:02:02 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das kannst du mit Spezialisierung lösen.</p>
<p><code>C_N</code> und <code>C_ON</code> sind dann einfach Parameter für Spezialisierungen der gleichen Funktion <code>nodes</code> .</p>
</blockquote>
<p>Ich habe das versucht wie folgt umzusetzen (gibt aber Fehler beim kompilieren):</p>
<pre><code class="language-cpp">template&lt;class N&gt; class A
{
public:
    virtual vector&lt;N*&gt; nodes() const = 0;
};

template&lt;class N, class ON&gt; class B : public virtual A&lt;N&gt;
{
public:
    template &lt;class R&gt; vector&lt;R*&gt; nodes() const;
};

template&lt;class N, class ON&gt; template&lt;&gt; vector&lt;N*&gt; B&lt;N, ON&gt;::nodes() const
{ }   // Rückgabe musste noch erzeugt und zurückgegeben werden

template&lt;class N, class ON&gt; template&lt;&gt; vector&lt;ON*&gt; B&lt;N, ON&gt;::nodes() const
{ }   // Rückgabe musste noch erzeugt und zurückgegeben werden
</code></pre>
<p>Die Fehlermeldung lautet:</p>
<pre><code>../src/scratch.h:15: error: invalid explicit specialization before ‘&gt;’
token
../src/scratch.h:15: error: enclosing class templates are not explicitly
    specialized
../src/scratch.h:15: confused by earlier errors, bailing out
</code></pre>
<p>Kann mir jemand sagen, wie man das richtig macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985477</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Thu, 25 Nov 2010 09:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 14:04:00 GMT]]></title><description><![CDATA[<p>Member-Funktionen kann man soweit ich weiss nicht spezialisieren.</p>
<p>Du kannst den Umweg über eine Helper-Klasse mit statischen Funktionen gehen wenn du unbedingt willst. Ist aber in der Konstellation vermutlich etwas ... &quot;hässlich&quot;.</p>
<p>Oder du kannst etwas wie <code>boost::type&lt;&gt;</code> und ganz normale Overloads verwenden:</p>
<pre><code class="language-cpp">class foo
{
public:
    void bar(boost::type&lt;baz&gt;);
    void bar(boost::type&lt;qux&gt;);
};

void test()
{
    foo f;
    f.bar(boost::type&lt;baz&gt;());
    f.bar(boost::type&lt;qux&gt;());
}
</code></pre>
<p>Wenn du willst könntest du dann auch eine Template-Funktion machen die einfach an die Overloads weiterleitet:</p>
<pre><code class="language-cpp">class foo
{
private:
    void bar_impl(boost::type&lt;baz&gt;);
    void bar_impl(boost::type&lt;qux&gt;);
public:
    template &lt;class T&gt;
    void bar()
    {
        return bar_impl(boost::type&lt;T&gt;());
    }
};

void test()
{
    foo f;
    f.bar&lt;baz&gt;();
    f.bar&lt;qux&gt;();
}
</code></pre>
<p>Letzte Möglichkeit die ich anzubieten habe, und IMO die beste:</p>
<pre><code class="language-cpp">template&lt;class N&gt; class A
{
public:
    vector&lt;N*&gt; nodes() const
    {
        return nodes_impl();
    }

private:
    virtual vector&lt;N*&gt; nodes_impl() const = 0;
};

template&lt;class N, class ON&gt; class B : public virtual A&lt;N&gt;
{
public:
    vector&lt;ON*&gt; nodes() const // neue nodes() funktion, verdeckt A::nodes()
    {
        // ...
    }

private:
    virtual vector&lt;N*&gt; nodes_impl() const // override von A::nodes_impl, implementiert A::nodes()
    {
        // ...
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1985623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985623</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 25 Nov 2010 14:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 16:45:28 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Member-Funktionen kann man soweit ich weiss nicht spezialisieren.</p>
</blockquote>
<p>Das stimmt. Bei Member-Funktions Templates geht das aber z.B. (sofern nicht partiell).</p>
<p>Interessant ist aber, dass Visual Studio 2010 das hier ohne Probleme (sogar bei ausgeschaltener Spracherweiterung! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ) kompiliert und ausführt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class N, class ON&gt;
class A
{
public:

	template&lt;class T&gt;
	void nodes();

	template&lt;&gt;
	void nodes&lt;N&gt;()
	{
		std::cout &lt;&lt; &quot;N\n&quot;;
	}

	template&lt;&gt;
	void nodes&lt;ON&gt;()
	{
		std::cout &lt;&lt; &quot;ON\n&quot;;
	}

private:
};

int main()
{
	A&lt;int,float&gt; a;
	a.nodes&lt;int&gt;(); // N
	a.nodes&lt;float&gt;(); // ON
}
</code></pre>
<p>Comeau Online bringt aber das hier:</p>
<blockquote>
<p>Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2<br />
Copyright 1988-2008 Comeau Computing. All rights reserved.<br />
MODE:non-strict warnings C++ C++0x_extensions</p>
<p>&quot;ComeauTest.c&quot;, line 11: error: explicit specialization is not allowed in the<br />
current scope<br />
template&lt;&gt;<br />
^</p>
<p>&quot;ComeauTest.c&quot;, line 17: error: explicit specialization is not allowed in the<br />
current scope<br />
template&lt;&gt;<br />
^</p>
<p>2 errors detected in the compilation of &quot;ComeauTest.c&quot;.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1985717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985717</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 25 Nov 2010 16:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 18:16:15 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Member-Funktionen kann man soweit ich weiss nicht spezialisieren.</p>
</blockquote>
<p>Das stimmt. Bei Member-Funktions Templates geht das aber z.B. (sofern nicht partiell).</p>
</blockquote>
<p>Uff, jetzt bin ich selbst verwirrt.<br />
Sowohl MSVC fressen Spezialisierung von<br />
a) einer Non-Template-Member-Funktion eines Klassen-Templates<br />
b) eines Member-Funktions-Templates einer Non-Template-Klasse</p>
<p>MSVC frisst dann weiterhin auch die Spezialisierung eines Member-Funktions-Templates eines Klassen-Templates, und zwar mit folgener Syntax:</p>
<pre><code class="language-cpp">template &lt;class K&gt;
class foo
{
public:
	template &lt;class F&gt;
	void test();
};

template &lt;class K&gt; // erst die klasse
template &lt;class F&gt; // dann die funktion -&gt; logisch soweit
inline void foo&lt;K&gt;::test()
{
}

template &lt;&gt; // funktion muss als erstes kommen
template &lt;class K&gt; // dann die klasse, sonst frisst es MSVC nicht -&gt; *verwirr*
inline void foo&lt;K&gt;::test&lt;int&gt;()
{
}
</code></pre>
<p>Comeau frisst es gar nicht.</p>
<p>----</p>
<p>Aber ganz egal wie das jetzt mit den offiziellen Regeln ist, ich würde es auf jeden Fall nicht mit Spezialisierung machen, sondern mit der &quot;nodes_impl&quot; Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985783</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 25 Nov 2010 18:16:15 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 20:59:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Comeau frisst es gar nicht.</p>
</blockquote>
<p>Mich verwirrt am meisten, dass VC das schluckt, auch wenn man die Spracherweiterungen abschaltet. Ohne die sollte er sich doch exakt an den Standard halten.. :S</p>
<blockquote>
<p>----</p>
<p>Aber ganz egal wie das jetzt mit den offiziellen Regeln ist, ich würde es auf jeden Fall nicht mit Spezialisierung machen, sondern mit der &quot;nodes_impl&quot; Variante.</p>
</blockquote>
<p>Hmm. Ich sehe ehrlich gesagt den Grund nicht ganz, warum man das über überhaupt über templates steuern soll.. Lediglich dass man keinen Namen nehmen muss finde ich das ein wenig übertrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985861</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 25 Nov 2010 20:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Thu, 25 Nov 2010 23:26:51 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Comeau frisst es gar nicht.</p>
</blockquote>
<p>Mich verwirrt am meisten, dass VC das schluckt, auch wenn man die Spracherweiterungen abschaltet. Ohne die sollte er sich doch exakt an den Standard halten.. :S</p>
</blockquote>
<p>DAS verwirrt mich nicht, MSVC hat einfach noch ein paar Bugs was Templates angeht <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>
<blockquote>
<p>----</p>
<p>Aber ganz egal wie das jetzt mit den offiziellen Regeln ist, ich würde es auf jeden Fall nicht mit Spezialisierung machen, sondern mit der &quot;nodes_impl&quot; Variante.</p>
</blockquote>
<p>Hmm. Ich sehe ehrlich gesagt den Grund nicht ganz, warum man das über überhaupt über templates steuern soll.. Lediglich dass man keinen Namen nehmen muss finde ich das ein wenig übertrieben.</p>
</blockquote>
<p>Äh. Die &quot;nodes_impl&quot; Variante von mir verwendet ja auch keine Templates.<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985906</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 25 Nov 2010 23:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 00:17:41 GMT]]></title><description><![CDATA[<p>Bugs und es funktioniert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Das wegen den templates war eigentlich auf den Ursprungs post bezogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985916</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 26 Nov 2010 00:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 00:33:07 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Bugs und es funktioniert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Na klar.<br />
Bei VC6 konnte (bzw. musste) man <code>typename</code> weglassen und es hat funktioniert <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/1985923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985923</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Nov 2010 00:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 12:43:31 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;class N, class ON&gt;
class A
{
public:

	template&lt;class T&gt;
	void nodes();

	template&lt;&gt;
	void nodes&lt;N&gt;()
	{
		std::cout &lt;&lt; &quot;N\n&quot;;
	}

	template&lt;&gt;
	void nodes&lt;ON&gt;()
	{
		std::cout &lt;&lt; &quot;ON\n&quot;;
	}

private:
};

int main()
{
	A&lt;int,float&gt; a;
	a.nodes&lt;int&gt;(); // N
	a.nodes&lt;float&gt;(); // ON
}
</code></pre>
</blockquote>
<p>Das gefällt mir so sehr gut. Nur will g++ das nicht kompilieren (habe -std=c++0x als Kompileroption gesetzt). Kann das g++ (bisher) überhaupt nicht? Falls dem so ist: Gibt es einen anderen Open-Source-Kompiler, der das kann?</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Hmm. Ich sehe ehrlich gesagt den Grund nicht ganz, warum man das über überhaupt über templates steuern soll.. Lediglich dass man keinen Namen nehmen muss finde ich das ein wenig übertrieben.</p>
</blockquote>
<p>Ich vermute, dass kann man so auch nicht sehen (ohne weitere Teile des Programms zu kennen). Bei mir ist nur der Eindruck entstanden, dass so wie es bisher ist, die Lesbarkeit meines Codes spürbar leidet.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Letzte Möglichkeit die ich anzubieten habe, und IMO die beste:</p>
<pre><code class="language-cpp">template&lt;class N&gt; class A
{
public:
    vector&lt;N*&gt; nodes() const
    {
        return nodes_impl();
    }

private:
    virtual vector&lt;N*&gt; nodes_impl() const = 0;
};

template&lt;class N, class ON&gt; class B : public virtual A&lt;N&gt;
{
public:
    vector&lt;ON*&gt; nodes() const // neue nodes() funktion, verdeckt A::nodes()
    {
        // ...
    }

private:
    virtual vector&lt;N*&gt; nodes_impl() const // override von A::nodes_impl, implementiert A::nodes()
    {
        // ...
    }
};
</code></pre>
</blockquote>
<p>Ich habe wohl noch eine Nebenbedingung vergessen: Wenn ich ein Objekt b der Klasse B habe, würde ich gerne beide nodes()-Funktionen auf b anwenden können. Das geht bei der Lösung doch nur, indem ich b zu A caste?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986149</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Fri, 26 Nov 2010 12:43:31 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 12:46:36 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Nur will g++ das nicht kompilieren (habe -std=c++0x als Kompileroption gesetzt). Kann das g++ (bisher) überhaupt nicht? Falls dem so ist: Gibt es einen anderen Open-Source-Kompiler, der das kann?</p>
</blockquote>
<p>Wie wärs wenn du uns die Infos lieferst, <strong>warum</strong> g++ das nicht compilieren will? Dann kann man dir vielleicht sogar helfen, g++ dazu zu bringen es doch zu compilieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986156</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 26 Nov 2010 12:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 12:52:31 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Wie wärs wenn du uns die Infos lieferst, <strong>warum</strong> g++ das nicht compilieren will? Dann kann man dir vielleicht sogar helfen, g++ dazu zu bringen es doch zu compilieren...</p>
</blockquote>
<p>Danke für den freundlichen Hinweis:</p>
<pre><code>../src/scratch.h:9: error: explicit specialization in non-namespace scope ‘
    class A&lt;N, ON&gt;’
../src/scratch.h:10: error: template-id ‘nodes&lt;N&gt;’ in declaration of
    primary template
../src/scratch.h:15: error: explicit specialization in non-namespace scope ‘
    class A&lt;N, ON&gt;’
../src/scratch.h:16: error: template-id ‘nodes&lt;ON&gt;’ in declaration of
    primary template
../src/scratch.h:16: error: ‘void A&lt;N, ON&gt;::nodes()’ cannot be overloaded
../src/scratch.h:10: error: with ‘void A&lt;N, ON&gt;::nodes()’
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1986159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986159</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Fri, 26 Nov 2010 12:52:31 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 13:29:20 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<pre><code>../src/scratch.h:9: error: explicit specialization in non-namespace scope
</code></pre>
</blockquote>
<p>Heißt übersetzt: &quot;Du hast eine Templatespezialisierung (nämlich die von nodes&lt;N&gt;, Anm.d.Übers.) in einem Gültigkeitsbereich (Scope) definiert, der kein Namespace ist! (Nämlich im Scope von class A&lt;N, ON&gt;)&quot;</p>
<p>Andersrum ausgedrückt heißt das, du musst die Spezialsierung außerhalb der Klasse definieren.<br />
Das ist allerdings auch nicht möglich, da <code>void A&lt;N, ON&gt;::node&lt;T&gt;()</code> als Ganzes ein Funktionstemplate ist, das nicht partiell spezialsiert werden darf - sprich, Spezialisierungen sind nur über N, ON und T möglich, nicht aber nur über T.<br />
Um das Problem zu lösen, könntest du die Spezialisierung auf ein Functor-Template umleiten, die dann möglich wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986193</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 26 Nov 2010 13:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 18:34:47 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Mich verwirrt am meisten, dass VC das schluckt, auch wenn man die Spracherweiterungen abschaltet. Ohne die sollte er sich doch exakt an den Standard halten.. :S</p>
</blockquote>
<p>Gibt es in MSVC++ wirklich so viele Erweiterungen auf Sprachebene (nicht CLI)? Mir fallen da z.B. Referenzen auf temporäre RValues ein, aber da gibts auch immer schön Warnungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986397</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 26 Nov 2010 18:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 19:25:12 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Ich habe wohl noch eine Nebenbedingung vergessen: Wenn ich ein Objekt b der Klasse B habe, würde ich gerne beide nodes()-Funktionen auf b anwenden können. Das geht bei der Lösung doch nur, indem ich b zu A caste?</p>
</blockquote>
<p>Nö, du kannst direkt <code>ptr-&gt;A::nodes()</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986427</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Nov 2010 19:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 19:34:40 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Mich verwirrt am meisten, dass VC das schluckt, auch wenn man die Spracherweiterungen abschaltet. Ohne die sollte er sich doch exakt an den Standard halten.. :S</p>
</blockquote>
<p>Gibt es in MSVC++ wirklich so viele Erweiterungen auf Sprachebene (nicht CLI)? Mir fallen da z.B. Referenzen auf temporäre RValues ein, aber da gibts auch immer schön Warnungen.</p>
</blockquote>
<p>Naja da gibt's schon ein paar:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/34h23df8(v=VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/34h23df8(v=VS.80).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986432</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Nov 2010 19:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 19:37:44 GMT]]></title><description><![CDATA[<p>Danke für den Link. Mal schauen, ob ich nicht aus Versehen ein paar davon benutze... <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/1986434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986434</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 26 Nov 2010 19:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 19:39:39 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Mich verwirrt am meisten, dass VC das schluckt, auch wenn man die Spracherweiterungen abschaltet. Ohne die sollte er sich doch exakt an den Standard halten.. :S</p>
</blockquote>
<p>Gibt es in MSVC++ wirklich so viele Erweiterungen auf Sprachebene (nicht CLI)? Mir fallen da z.B. Referenzen auf temporäre RValues ein, aber da gibts auch immer schön Warnungen.</p>
</blockquote>
<p>Ich weiss nicht in wie fern das dokumentiertes Verhalten ist, dass Sachen gehen, die nicht im Standard vorgesehen sind, aber ich bezweifle stark, dass das irgendwelche Bugs sind. Daher sind das imo Spracherweiterungen, da ja offensichtlich mehr akzeptiert wird.<br />
Ich war bis jetzt der Auffassung, dass VC beim Ausschalten der Spracherweiterungen sich wirklich so exakt an den Standard hält, wie möglich, auch wenn das bedeutet, dass gewisse Konstrukte (obwohl möglich) nicht gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986437</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 26 Nov 2010 19:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Fri, 26 Nov 2010 19:48:16 GMT]]></title><description><![CDATA[<p>drakon, glaub mir, das sind z.T. Bugs:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/x84h5b78.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/x84h5b78.aspx</a></p>
<p>Der &quot;dependent names&quot; Bug kann z.B. dazu führen dass Code geht, der nicht gehen sollte.<br />
Der Grossteil sind allerdings wirklich Bugs, wo höchstens Dinge nicht gehen, die eigentlich gehen sollten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1986444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1986444</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Nov 2010 19:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Mon, 29 Nov 2010 14:19:27 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Oder du kannst etwas wie <code>boost::type&lt;&gt;</code> und ganz normale Overloads verwenden:</p>
<pre><code class="language-cpp">class foo
{
public:
    void bar(boost::type&lt;baz&gt;);
    void bar(boost::type&lt;qux&gt;);
};

void test()
{
    foo f;
    f.bar(boost::type&lt;baz&gt;());
    f.bar(boost::type&lt;qux&gt;());
}
</code></pre>
</blockquote>
<p>Kann mir jemand sagen, in welcher Boost-Library ich boost::type&lt;&gt; finde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987525</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Mon, 29 Nov 2010 14:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenüberladung in Template-Klassen on Mon, 29 Nov 2010 15:10:08 GMT]]></title><description><![CDATA[<p>Keine Ahnung zu welcher &quot;Library&quot; das zählt. mMn müsste es zur &quot;Utility&quot; zählen, aber in der Doku isses nicht gelistet.</p>
<p>Inkludiere einfach <code>&lt;boost/type.hpp&gt;</code> und du bist dabei <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/1987577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987577</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 29 Nov 2010 15:10:08 GMT</pubDate></item></channel></rss>