<?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[Parametertyp &amp;quot;explizit&amp;quot; erzwingen.]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Ich suche schon seit Tagen erfolglos, wie ich folgendes erreichen kann:</p>
<p>Die an eine Methode übergebenen Parameter sollen exakt dem deklarierten Typ entsprechen (kein implizites casting), andernfalls soll ein Fehler beim Kompilieren auftreten.</p>
<p>Beispiel:<br />
typedef bool TypA;<br />
typedef bool TypB;<br />
void method(TypA parameter);</p>
<p>Nicht akzeptiert werden sollen in diesem Beispiel:<br />
TypB var1;<br />
method(var1) oder<br />
bool var2;<br />
method(var2);</p>
<p>Der Sinn darin ist übrigens, daß ich mir zu jeder Methode einen Satz Konstanten definieren möchte, die den Verlauf der Methode steuern. Dabei sollen die Konstanten für die verschiedenen Methoden nicht verwechselt werden können. Momentan kann man aber halt schlicht alle verwenden, da sie implizit auf bool gecasted werden.</p>
<p>Ich würde mich sehr über darüber freuen, wenn sich einer von Euch die Zeit dafür nimmt, mir hierin zu helfen.</p>
<p>Gruß</p>
<p>stroustrup</p>
<p>PS: Diesen Namen habe ich mir wohl eigentlich noch nicht verdient. *g*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223926/parametertyp-quot-explizit-quot-erzwingen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 12:53:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223926.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Oct 2008 15:31:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parametertyp &amp;quot;explizit&amp;quot; erzwingen. on Thu, 02 Oct 2008 15:31:05 GMT]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Ich suche schon seit Tagen erfolglos, wie ich folgendes erreichen kann:</p>
<p>Die an eine Methode übergebenen Parameter sollen exakt dem deklarierten Typ entsprechen (kein implizites casting), andernfalls soll ein Fehler beim Kompilieren auftreten.</p>
<p>Beispiel:<br />
typedef bool TypA;<br />
typedef bool TypB;<br />
void method(TypA parameter);</p>
<p>Nicht akzeptiert werden sollen in diesem Beispiel:<br />
TypB var1;<br />
method(var1) oder<br />
bool var2;<br />
method(var2);</p>
<p>Der Sinn darin ist übrigens, daß ich mir zu jeder Methode einen Satz Konstanten definieren möchte, die den Verlauf der Methode steuern. Dabei sollen die Konstanten für die verschiedenen Methoden nicht verwechselt werden können. Momentan kann man aber halt schlicht alle verwenden, da sie implizit auf bool gecasted werden.</p>
<p>Ich würde mich sehr über darüber freuen, wenn sich einer von Euch die Zeit dafür nimmt, mir hierin zu helfen.</p>
<p>Gruß</p>
<p>stroustrup</p>
<p>PS: Diesen Namen habe ich mir wohl eigentlich noch nicht verdient. *g*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592286</guid><dc:creator><![CDATA[stroustrup]]></dc:creator><pubDate>Thu, 02 Oct 2008 15:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Parametertyp &amp;quot;explizit&amp;quot; erzwingen. on Thu, 02 Oct 2008 15:50:11 GMT]]></title><description><![CDATA[<p>stroustrup schrieb:</p>
<blockquote>
<p>Hallo miteinander!</p>
<p>Ich suche schon seit Tagen erfolglos, wie ich folgendes erreichen kann:</p>
<p>Die an eine Methode übergebenen Parameter sollen exakt dem deklarierten Typ entsprechen (kein implizites casting), andernfalls soll ein Fehler beim Kompilieren auftreten.</p>
</blockquote>
<p>Kleiner Hinweis: der Prozess er Umwandlung eines Ausdrucks in einen Ausdruck mit anderem Typ ist eine Konvertierung (oder Konversion oder einfach Umwandlung etc.). Eine Konvertierung kann explizit oder implizit erfolgen, dass bezieht sich auf die Ursache der Konvertierung, genauer: die grammatikalische Form. In C++ existieren 6 verschiedene grammatikalische Formen (Casts), die eine bestimmte Umwandlung des Arguments bewirken - die so erzwungene Umwandlung ist dann explizit. Konvertierungen aus anderen Gründen sind dem entsprechend implizit. Ein &quot;impliziter Cast&quot; ist dagegen ein Oxymoron. Das aber nur als Hinweis, diese Begriffe werden sehr oft verwechselt oder synonym gebraucht - meinem Eindruck nach fehlt es dabei in der Regel am nötigen Verständnis.</p>
<p>Impliziter Konvertierungen beim Aufruf von Funktionen werden (weitgehend) unterdrückt, wenn der betreffende Parameter deduziert werden muss, also eine Templatefunktion benutzt wird. Mittels SFINAE es dabei möglich, den möglichen Spielraum für den zu deduzierenden Parameter beliebig einzuschränken.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
typename boost::enable_if&lt; boost::is_same&lt; T, bool &gt; &gt;::type
method(T arg);
</code></pre>
<p>stroustrup schrieb:</p>
<blockquote>
<p>PS: Diesen Namen habe ich mir wohl eigentlich noch nicht verdient. *g*</p>
</blockquote>
<p>Nein, und diese Wahl ist auch ziemlich idiotisch - aber darin bist du natürlich frei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592299</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 02 Oct 2008 15:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Parametertyp &amp;quot;explizit&amp;quot; erzwingen. on Thu, 02 Oct 2008 15:51:36 GMT]]></title><description><![CDATA[<p>stroustrup schrieb:</p>
<blockquote>
<p>Ich suche schon seit Tagen erfolglos, wie ich folgendes erreichen kann:</p>
</blockquote>
<p>typedef definiert keinen neuen Typen sondern nur einen neuen Namen für einen Typen. Das ist auch so eine C-Altlast. (Ergo geht es nicht!) Schreib mal was Du damit machen willst, dann kann man das möglicherweise leichter via Templates umsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592300</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Thu, 02 Oct 2008 15:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Parametertyp &amp;quot;explizit&amp;quot; erzwingen. on Thu, 02 Oct 2008 16:40:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Der Sinn darin ist übrigens, daß ich mir zu jeder Methode einen Satz Konstanten definieren möchte, die den Verlauf der Methode steuern. Dabei sollen die Konstanten für die verschiedenen Methoden nicht verwechselt werden können. Momentan kann man aber halt schlicht alle verwenden, da sie implizit auf bool gecasted werden.</p>
</blockquote>
<p>Für sowas nimmt man normalerweise enums.</p>
<pre><code class="language-cpp">enum FooOption {
    FooOptionOff,
    FooOptionOn
};

enum BarOption {
    BarOptionOff,
    BarOptionOn
};

void Baz(FooOption fo);
void Blubb(BarOption bo);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1592331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592331</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 02 Oct 2008 16:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Parametertyp &amp;quot;explizit&amp;quot; erzwingen. on Fri, 03 Oct 2008 09:07:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für Eure Antworten!</p>
<p>@hustenbär:<br />
Perfekt, damit konnte ich mein Ziel erreichen. Ich hatte es anfangs zwar schon mal so probiert, aber dabei muß ich mich zu dumm angestellt haben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Danke für die ausführliche Erläuterung. Dein Lösungsansatz ist sicher mächtig, allerdings habe ich hustenbärs vorgezogen, da er einfacher ist und für den vorliegenden Fall ausreichend. Und sorry für meinen Benutzernamen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>@~john:<br />
Was ich damit machen wollte ist, nochmal knapp erklärt, daß in hustenbärs Beispiel der Methode Blubb(BarOption) keine Konstante vom Typ FooOption übergeben werden kann, um Verwechslungen seitens des Benutzers auszuschließen. Daß es mit typedef nicht geht, hatte ich zwar vermutet, aber es halt einfach mal probiert.</p>
<p>Gruß</p>
<p>stroustrup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592784</guid><dc:creator><![CDATA[stroustrup]]></dc:creator><pubDate>Fri, 03 Oct 2008 09:07:51 GMT</pubDate></item></channel></rss>