<?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 Parameter]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe folgenden Code hier gebastelt. Aber da sind noch einige Fehler, würde gerne euren Rat dabei einholen wie man das fixen kann.</p>
<pre><code class="language-cpp">template&lt;class R, class... F&gt;
class Signal {

	public:

		void operator() () {
			m_sig();
		}

		void operator= ( Signal &amp;sig ) {
			m_sig = sig.getSignal();
		}

		void operator= ( Signal &amp;&amp;sig ) {
			m_sig = std::move ( sig.getSignal() );
		}

		Signal ( void ) { }

		Signal ( Signal &amp;&amp;sig ) {
			m_sig = std::move ( sig.getSignal() );
		}

		Signal ( std::function&lt;R(F...)&gt; func ) {
			m_sig = func;
		}

		Signal ( Signal &amp;sig ) {
			m_sig = sig.getSignal();
		}
		~Signal( void ) {};

		const std::function&lt;R(F...)&gt;&amp; getSignal ( void ) const {
			return m_sig;
		}

	private:
		std::function&lt;R(F...)&gt; m_sig;

	protected:
		R onDefault (F...) {}
};
</code></pre>
<p>Das Problem liegt halt an dem Punkt, an dem man die Parameter an das nächste Template weitergeben möchte. Ich weiß nicht wie man das richtig machen soll, und die konkrete Beispiele finde ich nirgends.</p>
<p>Gruß Slux</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307934/template-parameter</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 06:48:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307934.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Sep 2012 22:57:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Parameter on Sun, 09 Sep 2012 22:57:42 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe folgenden Code hier gebastelt. Aber da sind noch einige Fehler, würde gerne euren Rat dabei einholen wie man das fixen kann.</p>
<pre><code class="language-cpp">template&lt;class R, class... F&gt;
class Signal {

	public:

		void operator() () {
			m_sig();
		}

		void operator= ( Signal &amp;sig ) {
			m_sig = sig.getSignal();
		}

		void operator= ( Signal &amp;&amp;sig ) {
			m_sig = std::move ( sig.getSignal() );
		}

		Signal ( void ) { }

		Signal ( Signal &amp;&amp;sig ) {
			m_sig = std::move ( sig.getSignal() );
		}

		Signal ( std::function&lt;R(F...)&gt; func ) {
			m_sig = func;
		}

		Signal ( Signal &amp;sig ) {
			m_sig = sig.getSignal();
		}
		~Signal( void ) {};

		const std::function&lt;R(F...)&gt;&amp; getSignal ( void ) const {
			return m_sig;
		}

	private:
		std::function&lt;R(F...)&gt; m_sig;

	protected:
		R onDefault (F...) {}
};
</code></pre>
<p>Das Problem liegt halt an dem Punkt, an dem man die Parameter an das nächste Template weitergeben möchte. Ich weiß nicht wie man das richtig machen soll, und die konkrete Beispiele finde ich nirgends.</p>
<p>Gruß Slux</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249803</guid><dc:creator><![CDATA[Slux]]></dc:creator><pubDate>Sun, 09 Sep 2012 22:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to Template Parameter on Mon, 10 Sep 2012 12:10:58 GMT]]></title><description><![CDATA[<p>Slux schrieb:</p>
<blockquote>
<p>Das Problem liegt halt an dem Punkt, an dem man die Parameter an das nächste Template weitergeben möchte. Ich weiß nicht wie man das richtig machen soll, und die konkrete Beispiele finde ich nirgends.</p>
</blockquote>
<p>Meinst du so etwas?</p>
<pre><code class="language-cpp">template &lt;class S&gt;
struct Signal;

template &lt;class R, class ...P&gt;
struct Signal&lt;R (P...)&gt;
{
	//...
};

int main()
{
	Signal&lt;double (int, int, unsigned)&gt; s;
}
</code></pre>
<p>Einige Tipps:</p>
<ul>
<li><code>operator ()</code> sollte <code>R</code> zurückgeben und <code>P</code> s nehmen<br />
- Zuweisungsoperator nimmt <code>const</code> Referenz und gibt <code>*this</code> zurück</li>
<li><code>Signal ( void )</code> schreibt man nur in C</li>
<li><code>getSignal</code> ist unlogisch benannt, unnötig und schlechtes Design</li>
<li><code>m_sig = std::move ( sig.getSignal() );</code> da findet kein Move statt wegen <code>const</code><br />
- der Destruktor ist unnötig<br />
- ein Signal zeichnet sich eigentlich dadurch aus, dass es beliebig viele Slots erlaubt</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2249938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249938</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 10 Sep 2012 12:10:58 GMT</pubDate></item></channel></rss>