<?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[Klasse automatisch in bool umwandeln]]></title><description><![CDATA[<p>Hi,</p>
<p>ist es möglich eine Klasse B automatisch in einen bool umzuwandeln, so dass man sowas wie</p>
<pre><code class="language-cpp">B b;
if (b) ...
</code></pre>
<p>schreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227621/klasse-automatisch-in-bool-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 21:16:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227621.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Nov 2008 20:44:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse automatisch in bool umwandeln on Mon, 17 Nov 2008 20:44:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ist es möglich eine Klasse B automatisch in einen bool umzuwandeln, so dass man sowas wie</p>
<pre><code class="language-cpp">B b;
if (b) ...
</code></pre>
<p>schreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616180</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Mon, 17 Nov 2008 20:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse automatisch in bool umwandeln on Mon, 17 Nov 2008 21:00:53 GMT]]></title><description><![CDATA[<p>Man muss dafür den Cast-Operator in der Klasse überladen.</p>
<p>Entweder man macht es klassisch:</p>
<pre><code class="language-cpp">class MyClass
{
    public:
        operator bool() const
        {
             return myVar;
        }
    private:
        bool myVar;
};
</code></pre>
<p>Oder besser mit dem <em>Safe-Bool-Idiom</em> (damit verhindert man das versehentliche Eingliedern in arithmetische Operationen):</p>
<pre><code class="language-cpp">class MyClass 
{ 
    public: 
        operator const void*() const 
        { 
             if (myVar)
				 return IrgendeinZeigerBeispielsweiseThis; 
			 else
			     return NULL;
        } 
    private: 
        bool myVar; 
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1616183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616183</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 17 Nov 2008 21:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse automatisch in bool umwandeln on Tue, 18 Nov 2008 00:29:39 GMT]]></title><description><![CDATA[<p>das problem mit operator (const) void* ist allerdings, dass dann auch so etwas funktioniert:</p>
<pre><code class="language-cpp">MyClass c;
delete c;
</code></pre>
<p>das safe-bool-idiom wird am besten implementiert, indem man einen zeiger auf eine elementvariable (oder eine elementfunktion) zurückgibt UND operator== und operator!= überlädt (wenn == und != nicht sinnvoll sind, muss man sich einen trick überlegen, so dass deren aufruf einen compile-time-error ergibt)</p>
<p>in C++0x wird das übrigens einfacher möglich sein, indem man einen expliziten operator bool definiert:</p>
<pre><code class="language-cpp">//C++0x
class MyClass
{
public:
  explicit operator bool () const { /* ... */ }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1616224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616224</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 18 Nov 2008 00:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse automatisch in bool umwandeln on Tue, 18 Nov 2008 17:00:48 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>das problem mit operator (const) void* ist allerdings, dass dann auch so etwas funktioniert: [...]</p>
</blockquote>
<p>Du hast Recht, es gibt keine wirklich schöne Lösung dafür. Auch wenn man wahrscheinlich eher nicht <code>delete</code> anwendet oder die Klasse in arithmetische Operationen eingliedert, stellt es durchaus eine Gefahr dar. Den Hack mit <code>operator==</code> finde ich allerdings auch nicht gerade schön. Wenn ich den Cast-Operator zu <code>bool</code> benötige, werde ich wohl <code>operator void*</code> (je nachdem sogar <code>operator bool</code> ) benutzen...</p>
<p>queer_boy schrieb:</p>
<blockquote>
<p>in C++0x wird das übrigens einfacher möglich sein, indem man einen expliziten operator bool definiert:</p>
</blockquote>
<p>Was ändert sich durch das <code>explicit</code> ? Kann man die Klasse als boolschen Ausdruck interpretieren, aber ansonsten wäre ein Cast notwendig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616652</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 18 Nov 2008 17:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse automatisch in bool umwandeln on Tue, 18 Nov 2008 21:25:41 GMT]]></title><description><![CDATA[<p>explicit bedeutet (wird bedeuten) in dem fall, dass es zwar eine konvertierungsmöglichkeit nach X gibt, die aber nur explizit (also mit cast) möglich ist;</p>
<p>gleichzeitig wird die explizite typumwandlung nach bool in (neu eingeführten) bool-kontexten automatisch durchgeführt. so ein bool-kontext ist z.b. der kopf einer while-schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616825</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 18 Nov 2008 21:25:41 GMT</pubDate></item></channel></rss>