<?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[methode deaktivieren]]></title><description><![CDATA[<p>dumme frage aber:</p>
<pre><code>template&lt;int i&gt;
struct foo
{
	void f(int, char){}
	void f(int){} //&lt;--
};
</code></pre>
<p>die methode hier will ich deaktivieren wenn i != 1 ist. wie mache ich das? crtp geht nicht weil es mehrere f gibt (hier im beispiel nur zwei) und die bei vererbung dann ja verdeckt werden. enable_if geht nicht weil die methode unbedingt instanziiert wird da sie kein template ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328531/methode-deaktivieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 12:21:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328531.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Oct 2014 14:46:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 14:46:58 GMT]]></title><description><![CDATA[<p>dumme frage aber:</p>
<pre><code>template&lt;int i&gt;
struct foo
{
	void f(int, char){}
	void f(int){} //&lt;--
};
</code></pre>
<p>die methode hier will ich deaktivieren wenn i != 1 ist. wie mache ich das? crtp geht nicht weil es mehrere f gibt (hier im beispiel nur zwei) und die bei vererbung dann ja verdeckt werden. enable_if geht nicht weil die methode unbedingt instanziiert wird da sie kein template ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422191</guid><dc:creator><![CDATA[hanstroll123]]></dc:creator><pubDate>Tue, 14 Oct 2014 14:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 14:52:45 GMT]]></title><description><![CDATA[<p>z.B.</p>
<pre><code class="language-cpp">template&lt;int i&gt;
struct foo
{
    void f(int, char){}
    template &lt;typename enable_if&lt;i==1,int&gt;::type=0&gt;
    void f(int){}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2422193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422193</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 14 Oct 2014 14:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 14:57:19 GMT]]></title><description><![CDATA[<p>geht das auch iwie in c++03 wo's noch keine default-template-argumente gibt? ne zweite private methode die ein argument verlangt und die dann von der echten funktion aufgerufen wird mit dummy-template-argument? hmm naja ich hätte auch nen globalen funktor schreiben können und den iwie spezialisieren, hab aber gehofft es gibt was eleganteres. danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422195</guid><dc:creator><![CDATA[hanstroll123]]></dc:creator><pubDate>Tue, 14 Oct 2014 14:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 15:15:36 GMT]]></title><description><![CDATA[<p>es geht nicht wenn ichs auslagere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <a href="http://ideone.com/1ZUCJf" rel="nofollow">http://ideone.com/1ZUCJf</a></p>
<pre><code>template&lt;bool, typename&gt;
struct enable_if
{
};
template&lt;typename T&gt;
struct enable_if&lt;true, T&gt;
{
	typedef T type;
};

template&lt;int i&gt;
struct foo
{
	template &lt;typename enable_if&lt;i==1, int&gt;::type&gt;
    void helper(int){}

    void f(int, char){}
    void f(int z){ helper&lt;0&gt;(z); }
};

int main()
{
	foo&lt;2&gt; k;
	k.f(0, 0);
}
</code></pre>
<p>andere ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422201</guid><dc:creator><![CDATA[hanstroll123]]></dc:creator><pubDate>Tue, 14 Oct 2014 15:15:36 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 15:28:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;bool, typename=void&gt;
struct enable_if {};
template&lt;typename T&gt;
struct enable_if&lt;true, T&gt; { typedef T type; };

template &lt;typename T, typename U&gt;
struct is_convertible
{
    typedef char no[1];
    typedef char yes[2];
    static T makeT();
    static no&amp; test(...);
    static yes&amp; test(U);
    static const bool value = sizeof(test(makeT())) == sizeof(yes);
};

template&lt;int i&gt;
struct foo
{
    void f(int, char){}
    template &lt;typename T&gt;
    typename enable_if&lt;i==1&amp;&amp;is_convertible&lt;T,int&gt;::value&gt;::type f(T){}
};

int main()
{
    foo&lt;1&gt; x; x.f(0,0); x.f(0);
    foo&lt;2&gt; y; y.f(0,0); //y.f(0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2422204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422204</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 14 Oct 2014 15:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 15:48:17 GMT]]></title><description><![CDATA[<p>mhh ok, das wäre i.o.</p>
<p>kannst du mir mal bitte sagen, ob das hier theoretisch korrekt wäre? (mit gcc gehts zumindest)<br />
ist mir gerade noch in den sinn gekommen als ich an boosts static_assert gedacht hab.</p>
<pre><code>template&lt;int i&gt;
struct foo
{
	void f(int, char){}
    void f(int){ char dummy[i == 1 ? 1 : -1]; }
};

int main()
{
    foo&lt;1&gt; x; x.f(0,0); x.f(0);
    foo&lt;2&gt; y; y.f(0,0); //y.f(0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2422210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422210</guid><dc:creator><![CDATA[hanstroll123]]></dc:creator><pubDate>Tue, 14 Oct 2014 15:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 16:02:15 GMT]]></title><description><![CDATA[<p>Ja, das ist korrekt. Memberfunktionen werden nicht automatisch mit der Klasse instantiiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422212</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 14 Oct 2014 16:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to methode deaktivieren on Tue, 14 Oct 2014 16:03:20 GMT]]></title><description><![CDATA[<p>hanstroll123 schrieb:</p>
<blockquote>
<p>kannst du mir mal bitte sagen, ob das hier theoretisch korrekt wäre? (mit gcc gehts zumindest)</p>
</blockquote>
<p>Der Unterschied ist hier, dass die Überladung trotzdem existiert. Sofern allerdings für i!=1 sowieso kein f mit nur einem Parameter existieren soll, würde ich das gegenüber enable_if vorziehen, weil es zu einer verständlicheren Fehlermeldung führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422213</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 14 Oct 2014 16:03:20 GMT</pubDate></item></channel></rss>