<?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[Templatespezialisierung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin gerade dabei, mir ein Delegate-ähnliches System in C++ zu schreiben:</p>
<pre><code class="language-cpp">template &lt;typename _RetT,typename _ParamT, typename _T&gt;
class Functor : public FunctorBase&lt;_RetT, _ParamT&gt;
{
public:
	Functor(_T addr): m_function(addr)
	{}

	_RetT operator()(_ParamT param) const
	{
		return m_function(param);
	}

private:

	_T m_function;

};
</code></pre>
<p>_ParamT und _RetT beschreiben dabei die Signatur der aufzurufenden Funktion.<br />
Jetzt hab ich aber das Problem, dass ich das Template für _ParamT = void teilweise spezialiseren muss, was mir aber syntaktisch irgendwie nicht gelingt. Wie müsste der Kopf des Templates für diese Spezialisierung aussehen?</p>
<p>Danke schonmal</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199266/templatespezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 12:53:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199266.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Nov 2007 14:46:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatespezialisierung on Fri, 30 Nov 2007 14:46:23 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin gerade dabei, mir ein Delegate-ähnliches System in C++ zu schreiben:</p>
<pre><code class="language-cpp">template &lt;typename _RetT,typename _ParamT, typename _T&gt;
class Functor : public FunctorBase&lt;_RetT, _ParamT&gt;
{
public:
	Functor(_T addr): m_function(addr)
	{}

	_RetT operator()(_ParamT param) const
	{
		return m_function(param);
	}

private:

	_T m_function;

};
</code></pre>
<p>_ParamT und _RetT beschreiben dabei die Signatur der aufzurufenden Funktion.<br />
Jetzt hab ich aber das Problem, dass ich das Template für _ParamT = void teilweise spezialiseren muss, was mir aber syntaktisch irgendwie nicht gelingt. Wie müsste der Kopf des Templates für diese Spezialisierung aussehen?</p>
<p>Danke schonmal</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412988</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Fri, 30 Nov 2007 14:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Fri, 30 Nov 2007 15:55:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename _ParamT, typename _T&gt;
class Functor&lt;void, _ParamT, _T&gt;
{
  // ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1413040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413040</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 30 Nov 2007 15:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Fri, 30 Nov 2007 16:08:15 GMT]]></title><description><![CDATA[<p>Nur als Anmerkung: Bezeichner, die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sind in C++ für den Kompiler reserviert, also ist die Verwendung illegal^^.</p>
<p>Wozu brauchst du eigentlich die Spezialisierung auf void? Das klappt doch so wie mit allen anderen Datantypen auch. Eine Funktion die void zurückgibt darf das Ergebnis einer Funktion, die ebenfallse void zurückgibt, zurückgeben ;).</p>
<pre><code class="language-cpp">void foo()
{ }

void bar()
{
    return foo();
}
</code></pre>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413047</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Fri, 30 Nov 2007 16:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Fri, 30 Nov 2007 16:24:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a>: Ich wollte zwar ParamT spezialisieren^^, deine Beitrag hat mir aber trotzdem geholfen, danke</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13710">@Don06</a>: Die Unterstriche habe ich genommen, um die Template- von den Funktionsparamtern besser unterscheiden zu können, die Bezeichner sind ja sowieso nur im Kontext des Templates sichtbar.<br />
Außerdem: das mit den void-Rückgabewerten war mir bekannt (und ist in diesem Zusammenhang äußerst nützlich), aber ich wollte ja nicht den Rückgabe- sondern den Parametertypen spezialisieren, denn sowas klappt ja leider nicht <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>
<pre><code class="language-cpp">void operator()(void param) const
    {
        return m_function(param);
    }
</code></pre>
<p>Grüße</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413054</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Fri, 30 Nov 2007 16:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Fri, 30 Nov 2007 17:02:18 GMT]]></title><description><![CDATA[<p>JimmydaMage schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13710">@Don06</a>: Die Unterstriche habe ich genommen, um die Template- von den Funktionsparamtern besser unterscheiden zu können, die Bezeichner sind ja sowieso nur im Kontext des Templates sichtbar.</p>
</blockquote>
<p>Den Compiler interessiert aber nicht, <em>warum</em> du die benutzt <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/1413071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413071</guid><dc:creator><![CDATA[großer zeh++]]></dc:creator><pubDate>Fri, 30 Nov 2007 17:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung on Sat, 01 Dec 2007 09:21:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Da Du eine Template Klasse gemacht hast, muss auch die Template Klasse spezialisiert werden.</p>
<p>Hier wäre ein Ansatz. Ich habe mir allerdings dei Freiheit genommen nicht mehr von FunctorBase abzuleiten, damits für mich übersichtlicher wird.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;typename _RetT, typename _ParamT, typename _T&gt; 
class Functor
{ 
public: 
    Functor(_T addr): m_function(addr) 
    {} 

    _RetT operator()(_ParamT param) const
    {
        return m_function(param); 
    }

private: 
    _T m_function; 
};

template &lt;typename _RetT, typename _T&gt; 
class Functor&lt;_RetT, void, _T&gt;
{ 
public: 
    Functor(_T addr): m_function(addr) 
    {} 

    _RetT operator()() const
    {
        return m_function(); 
    }

private: 
    _T m_function; 
};

typedef int (*(Func1))(int);

int square(int i)
{
	return i*i;
}

typedef void (*(Func2))(int);

void print(int i)
{
	std::cout &lt;&lt; i &lt;&lt; std::endl;
}

typedef void (*(Func3))();

void test()
{
	std::cout &lt;&lt; &quot;Test&quot; &lt;&lt; std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Functor&lt;int, int, Func1&gt; f1(&amp;square);
	int q = f1(12);

	Functor&lt;void, int, Func2&gt; f2(&amp;print);
	f2(q);

	Functor&lt;void, void, Func3&gt; f3(&amp;test);
	f3();

	return 0;
}
</code></pre>
<p>Vielleicht hilfts Dir.<br />
Grüsse Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413253</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Sat, 01 Dec 2007 09:21:06 GMT</pubDate></item></channel></rss>