<?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[Operator Template in Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code>class A
{
public:
    template &lt;typename T&gt;
    bool operator()(const std::string&amp; str)
    {

    }
};
</code></pre>
<p>Wenn ich den Operator jetzt benutzen möchte:</p>
<pre><code>A instance;

if (instance&lt;int&gt;(&quot;test&quot;))
{

}
</code></pre>
<p>Bekomme ich die Fehlermeldung vom Compiler, das er erst eine &quot;primary expression&quot; vor dem '&lt;' Token erwartet. Wenn ich es so schreibe:</p>
<pre><code>instance.operator()&lt;int&gt;(&quot;test&quot;)
</code></pre>
<p>... tritt der Fehler nicht mehr auf.</p>
<ol>
<li>Wieso tritt dieses Verhalten auf?</li>
<li>Wie kann ich das so hinkriegen &quot;wie ich es will&quot;?</li>
</ol>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332201/operator-template-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 10:56:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332201.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Apr 2015 12:29:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 12:29:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code>class A
{
public:
    template &lt;typename T&gt;
    bool operator()(const std::string&amp; str)
    {

    }
};
</code></pre>
<p>Wenn ich den Operator jetzt benutzen möchte:</p>
<pre><code>A instance;

if (instance&lt;int&gt;(&quot;test&quot;))
{

}
</code></pre>
<p>Bekomme ich die Fehlermeldung vom Compiler, das er erst eine &quot;primary expression&quot; vor dem '&lt;' Token erwartet. Wenn ich es so schreibe:</p>
<pre><code>instance.operator()&lt;int&gt;(&quot;test&quot;)
</code></pre>
<p>... tritt der Fehler nicht mehr auf.</p>
<ol>
<li>Wieso tritt dieses Verhalten auf?</li>
<li>Wie kann ich das so hinkriegen &quot;wie ich es will&quot;?</li>
</ol>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450305</guid><dc:creator><![CDATA[asadsad]]></dc:creator><pubDate>Wed, 15 Apr 2015 12:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 12:37:07 GMT]]></title><description><![CDATA[<p>1. Weil instance kein Template ist.<br />
2. Garnicht. Operatoren kannst Du nicht templatisieren, es seidenn der Template-Parameter kann deduziert werden, weil T in der Parameterliste des Operators vorkommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450308</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 15 Apr 2015 12:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 13:24:53 GMT]]></title><description><![CDATA[<p>Zur Deduzierung kannste bspw. ein identity-Template o.ä. verwenden:</p>
<pre><code>template &lt;typename T&gt; struct identity {using type = T;};

class A
{
public:
    template &lt;typename T&gt;
    bool operator()(identity&lt;T&gt;, const std::string&amp; str)
    {

    }
};
....
instance(identity&lt;int&gt;{}, &quot;test&quot;)
</code></pre>
<p>ggf. identity schöner nennen, so dass das semantisch mehr Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450315</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 15 Apr 2015 13:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 18:20:29 GMT]]></title><description><![CDATA[<p>Danke für die Antworten.</p>
<pre><code>using type = T;
</code></pre>
<p>... was bewirkt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450378</guid><dc:creator><![CDATA[asadsad]]></dc:creator><pubDate>Wed, 15 Apr 2015 18:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 18:28:14 GMT]]></title><description><![CDATA[<p>asadsad schrieb:</p>
<blockquote>
<p>Danke für die Antworten.</p>
<pre><code>using type = T;
</code></pre>
<p>... was bewirkt das?</p>
</blockquote>
<pre><code>typedef T type;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2450379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450379</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Apr 2015 18:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Template in Klasse on Wed, 15 Apr 2015 18:29:42 GMT]]></title><description><![CDATA[<p>asadsad schrieb:</p>
<blockquote>
<p>Danke für die Antworten.</p>
<pre><code>using type = T;
</code></pre>
<p>... was bewirkt das?</p>
</blockquote>
<p>Das ist die neue Version eines typedefs in C++11. Äquivalent zu typedef T type.</p>
<p>Ist hier auch nicht notwendig, nur der vollständig halber, weil man identity auch nutzen kann, wenn man keine Deduktion haben möchte:</p>
<pre><code>template &lt;typename T&gt;
void deduced(T t);

template &lt;typename T&gt;
void non_deduced(typename identity&lt;T&gt;::type t);
</code></pre>
<p>Weil der Compiler nicht wissen kann, ob identity spezialisiert ist, kann er T nicht deduzieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450380</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 15 Apr 2015 18:29:42 GMT</pubDate></item></channel></rss>