<?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[Implizite Konvertierung zu Const -.-]]></title><description><![CDATA[<p>Hallo da,</p>
<p>ich hatte den Plan, durch zwei unterschiedliche Member die Mehrdeutigkeit zwischen const und non-const-Versionen von Methoden zu unterscheiden:</p>
<pre><code class="language-cpp">template&lt;typename Ret, typename C, typename... Args, typename... Injectors&gt;
	class_&amp; def_nonconst(char const* name, Ret(C::*fn)(Args...), meta::type_list&lt;Injectors...&gt; policies = no_injectors())
	{
		return def(name, fn, policies);
	}

	template&lt;typename Ret, typename C, typename... Args, typename... Injectors&gt;
	class_&amp; def_const(char const* name, Ret(C::*fn)(Args...) const, meta::type_list&lt;Injectors...&gt; policies = no_injectors())
	{
		return def(name, fn, policies);
	}
</code></pre>
<p>Leider scheitert die const-Variante daran, dass Methodenzeiger offenbar implizit in in const-Methodenzeiger konvertiert werden können. Ich bin fast überzeugt, dass es keine Möglichkeit gibt, da etwas zu machen, aber vielleicht fällt euch doch noch etwas total gutes dazu ein?</p>
<p>Viele Grüße,<br />
decimad</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320340/implizite-konvertierung-zu-const</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 04:50:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320340.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Sep 2013 20:52:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 20:52:58 GMT]]></title><description><![CDATA[<p>Hallo da,</p>
<p>ich hatte den Plan, durch zwei unterschiedliche Member die Mehrdeutigkeit zwischen const und non-const-Versionen von Methoden zu unterscheiden:</p>
<pre><code class="language-cpp">template&lt;typename Ret, typename C, typename... Args, typename... Injectors&gt;
	class_&amp; def_nonconst(char const* name, Ret(C::*fn)(Args...), meta::type_list&lt;Injectors...&gt; policies = no_injectors())
	{
		return def(name, fn, policies);
	}

	template&lt;typename Ret, typename C, typename... Args, typename... Injectors&gt;
	class_&amp; def_const(char const* name, Ret(C::*fn)(Args...) const, meta::type_list&lt;Injectors...&gt; policies = no_injectors())
	{
		return def(name, fn, policies);
	}
</code></pre>
<p>Leider scheitert die const-Variante daran, dass Methodenzeiger offenbar implizit in in const-Methodenzeiger konvertiert werden können. Ich bin fast überzeugt, dass es keine Möglichkeit gibt, da etwas zu machen, aber vielleicht fällt euch doch noch etwas total gutes dazu ein?</p>
<p>Viele Grüße,<br />
decimad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355272</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 20:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:03:08 GMT]]></title><description><![CDATA[<p>Ich habe erst mal den ersten und dritten Parameter entfernt, da diese nicht essenziell waren:</p>
<pre><code>template&lt;typename Ret, typename C, typename... Args&gt;
class_&amp; def_nonconst( Ret(C::*fn)(Args...) )
{
	return def(name, fn, policies);
}

template&lt;typename Ret, typename C, typename... Args&gt;
class_&amp; def_const( Ret(C::*fn)(Args...) const )
{
	return def(fn);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355274</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:19:57 GMT]]></title><description><![CDATA[<p>Meintest du das hier:</p>
<pre><code>Ret(C::* const fn)(Args...)
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355277</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:19:57 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:27:24 GMT]]></title><description><![CDATA[<p>Ja, das meinte ich! Das rettet mich vor leidvollen static_casts! Von welchem Typ war denn meine versuchte Zeiger-Zu-Const-Methode wirklich? Oo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355279</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:28:32 GMT]]></title><description><![CDATA[<p>Und vor allem, warum hat dasselbe bei static_cast funktioniert? Oo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355280</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:30:54 GMT]]></title><description><![CDATA[<p>Also ich meine:</p>
<pre><code class="language-cpp">static_cast&lt;int(Klasse::*)() const&gt;(&amp;Klasse::Methode);
</code></pre>
<p>löst die Mehrdeutigkeit auf... Ist das normal, dass ohne einen &quot;Namen&quot; für die Sache das const dahinter stehen darf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355282</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 21:34:31 GMT]]></title><description><![CDATA[<p>Hrmmm,</p>
<pre><code class="language-cpp">static_cast&lt;int(Klasse::* const)()&gt;(&amp;Klasse::Methode);
</code></pre>
<p>kompiliert nicht... Ich wundere mich gerade irgendwie...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355283</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 21:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Tue, 24 Sep 2013 22:33:21 GMT]]></title><description><![CDATA[<p>Hallo nochmal, ich bin irgendwie gerade verwirrt, aber kann an keinen 2013RC-Compiler...<br />
Folgender Code kompiliert mit VC2012 und gcc absolut fehlerfrei:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

struct test {
    void foo() { std::cout &lt;&lt; &quot;foo\n&quot;; }
    void foo() const { std::cout &lt;&lt; &quot;foo const\n&quot;; }
};

template&lt; typename Ret, typename... Args, typename C &gt;
void do_const( Ret (C::*func)(Args... ) const)
{
    test t;
    (t.*func)();
}

template&lt; typename Ret, typename... Args, typename C &gt;
void do_nonconst( Ret (C::*func)(Args... ))
{
    test t;
    (t.*func)();
}

int main()
{
    do_const( &amp;test::foo );
    do_nonconst( &amp;test::foo );

    return 0;
}
</code></pre>
<p>Allerdings hat für mich vorhin alles so ausgesehen, als würde 2013RC genau hier bei do_const eine Mehrdeutigkeit anmäkeln, darum habe ich mich hier gemeldet. Ich kann das erst morgen wieder nachprüfen, leider.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355297</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Tue, 24 Sep 2013 22:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 02:18:50 GMT]]></title><description><![CDATA[<p>Darf ich fragen wozu du das verwenden willst?</p>
<p>Bitte nicht falsch verstehen, ich will nicht rumnörgeln, ist reine Neugier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355303</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 25 Sep 2013 02:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 05:02:28 GMT]]></title><description><![CDATA[<p>Klar,<br />
das ist Teil von meinem luabind-fork (<a href="https://github.com/decimad/luabind-deboostified" rel="nofollow">https://github.com/decimad/luabind-deboostified</a>). Vereinfacht (soll vereinfachen) die Definition von Methoden, die eben als const und als non-const vorhanden sind, wo man zur Zeit halt &quot;per Hand&quot; casten und dafür die ganze Signatur ausschreiben muss.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355308</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Wed, 25 Sep 2013 05:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 06:28:19 GMT]]></title><description><![CDATA[<p>Okay, weiter umgeschrieben und volles Testprogramm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class test_class
{
public:
    void test(int) const { std::cout &lt;&lt; &quot;const\n&quot;; }
	void test(int)       { std::cout &lt;&lt; &quot;nonconst\n&quot;;  }
};

template&lt;typename FnType&gt;
int def(FnType fn)
{
	test_class t;
	(t.*fn)(4);
	return 2;
}

template&lt; typename... Args &gt;
struct meth_cast {
	template&lt; typename Class, typename Ret &gt;
	static auto cast_const( Ret(Class::*fn)(Args...) const )-&gt; decltype(fn)
	{
		return fn;
	}

	template&lt; typename Class, typename Ret &gt;
	static auto cast_nonconst( Ret(Class::*fn)(Args...) ) -&gt; decltype(fn)
	{
		return fn;
	}
};

int main(int argc, char* argv[])
{
	std::cout 
		&lt;&lt; def(meth_cast&lt;int&gt;::cast_const(&amp;test_class::test))
		&lt;&lt; def(meth_cast&lt;int&gt;::cast_nonconst(&amp;test_class::test));

	return 0;
}
</code></pre>
<p>Sowohl VC2013 als auch GCC auf <a href="http://Ideone.com" rel="nofollow">Ideone.com</a> geben aus:</p>
<blockquote>
<p>nonconst<br />
const</p>
</blockquote>
<p>Irgendwas verpeile ich doch hier extrem maximal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355314</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Wed, 25 Sep 2013 06:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 06:50:32 GMT]]></title><description><![CDATA[<p>Wenn man an eine Sache denkt, dann ist das Problem ein anderes... das funktioniert schon genau richtig so, man sollte sich nur Gedanken darüber machen, in welcher Reihenfolge Funktionsargumente ausgewertet werden <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="😉"
    /><br />
Sorry für das Rauschen hier <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2355315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355315</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Wed, 25 Sep 2013 06:50:32 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 07:38:16 GMT]]></title><description><![CDATA[<p>Und das Problem aus meinem OP war auch gar keines, der Code funktionierte wunderbar. Nur hat IntelliSense vom 2013RC einen Bug, der den Code als fehlerhaft markiert, obwohl der Compiler ihn schluckt. Hab' ich mal gemeldet - aber ich sollte mich wohl sowieso nicht so sehr auf IntelliSense verlassen...</p>
<p>Viele Grüße &amp; einen schönen Tag noch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355318</guid><dc:creator><![CDATA[decimad]]></dc:creator><pubDate>Wed, 25 Sep 2013 07:38:16 GMT</pubDate></item><item><title><![CDATA[Reply to Implizite Konvertierung zu Const -.- on Wed, 25 Sep 2013 09:34:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Hab' ich mal gemeldet - aber ich sollte mich wohl sowieso nicht so sehr auf IntelliSense verlassen...</p>
</blockquote>
<p>Ja, es ist allgemein bekannt dass IntelliSense viele false positives liefert. Daher: Gerade bei C++11 &amp; co. einfach ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355353</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 25 Sep 2013 09:34:13 GMT</pubDate></item></channel></rss>