<?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[Abfrageb, ob Objekt fehlerfrei erstellt wurde]]></title><description><![CDATA[<p>Moin,</p>
<p>Ihr seht im Titel, dass ich nicht mal weiß, nach welchen Schlagworten ich suchen soll.</p>
<p>Bei der fstream-Klasse macht man ja sowas, um zu prüfen, ob eine Funktion richtig ausgeführt wurde:</p>
<pre><code class="language-cpp">ifstream inputStream;
   inputStream.open(&quot;file.txt&quot;);

   if( !inputStream ) {
     cerr &lt;&lt; &quot;Error opening input stream&quot; &lt;&lt; endl;
   }
   // or
   if ( inputStream ) {
     // use inputStream
   }
</code></pre>
<p>Ich finde dieses Vorgehen sehr elegant und möchte meine eigenen Klassen auch so implementieren, dass ich einfach das &quot;Objekt abfrage&quot;, ob alles geklappt hat.</p>
<p>Wie ist der Mechanismus dahinter?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268797/abfrageb-ob-objekt-fehlerfrei-erstellt-wurde</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 15:12:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268797.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jun 2010 15:24:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abfrageb, ob Objekt fehlerfrei erstellt wurde on Mon, 14 Jun 2010 15:24:55 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Ihr seht im Titel, dass ich nicht mal weiß, nach welchen Schlagworten ich suchen soll.</p>
<p>Bei der fstream-Klasse macht man ja sowas, um zu prüfen, ob eine Funktion richtig ausgeführt wurde:</p>
<pre><code class="language-cpp">ifstream inputStream;
   inputStream.open(&quot;file.txt&quot;);

   if( !inputStream ) {
     cerr &lt;&lt; &quot;Error opening input stream&quot; &lt;&lt; endl;
   }
   // or
   if ( inputStream ) {
     // use inputStream
   }
</code></pre>
<p>Ich finde dieses Vorgehen sehr elegant und möchte meine eigenen Klassen auch so implementieren, dass ich einfach das &quot;Objekt abfrage&quot;, ob alles geklappt hat.</p>
<p>Wie ist der Mechanismus dahinter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1912249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1912249</guid><dc:creator><![CDATA[DarthZiu]]></dc:creator><pubDate>Mon, 14 Jun 2010 15:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Abfrageb, ob Objekt fehlerfrei erstellt wurde on Mon, 14 Jun 2010 15:42:10 GMT]]></title><description><![CDATA[<p>Stichwort: Safe Bool Idiom</p>
<p><a href="http://www.artima.com/cppsource/safebool.html" rel="nofollow">http://www.artima.com/cppsource/safebool.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1912257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1912257</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 Jun 2010 15:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to Abfrageb, ob Objekt fehlerfrei erstellt wurde on Mon, 14 Jun 2010 15:47:42 GMT]]></title><description><![CDATA[<p>EDIT: Habe das vor SeppJs Post geschrieben und beziehe mich nicht darauf!!</p>
<p>Hi,</p>
<p>ich muss gestehen, dass ich das gar nicht &quot;elegant&quot; finde.<br />
Exceptions wurden genau für sowas entworfen und sind da oftmals viel passender.<br />
Das Problem bei Gezeigtem ist, dass es dem Aufrufer ganz schnell passieren kann, diese Abfrage zu vergessen - und dann läuft er unbewusst in böse Fallen.</p>
<p>Die Frage ist ja: Was soll ein Benutzer mit einem kaputten Objekt machen?<br />
(gerade weil er gar nicht unbedingt wissen kann, woran es gehakt hat).<br />
Bei den std::stream-Objekten muss man auch raten: Konnte man das File nicht öffnen? Ging die letzte Lese- oder Schreiboperation schief? und wenn ja: Warum? konnte das Gelesene nicht gewünscht interpretiert werden (Nondigit wo Zahl erwartet, ...) ? ....<br />
Das ist nicht trivial und spart überhaupt nichts ggü. Exceptions.</p>
<p>Wenn das Objekt trotzdem benutzbar und/oder &quot;reparierbar&quot; ist, kann man das so wie oben gezeigt machen, indem man einen entsprechenden &quot;cast-operator&quot; definiert.</p>
<p>z.B.</p>
<pre><code class="language-cpp">struct myClass {
   operator bool() const { return ....  // hier wird der Status geprüft und entsprechend true oder false zurückgegeben
</code></pre>
<p>Ein Anderes Problem dieser Herangehensweise liegt darin, dass damit überall ein impliziter cast gemacht werden kann - auch in Situationen, wo einem das nicht bewusst ist.</p>
<p>Das führt zu häßlichen Effekten wie z.B. bei</p>
<pre><code class="language-cpp">struct myClass {
   operator int() const;
};

void hallo(int i);

int main() {
   int a1;
   myClass a2;

   hallo(a2); // hoppla! Gemeint war a1
...
</code></pre>
<p>Das findet der Compiler in Ordnung. Das sieht jetzt sehr simpel aus, kann aber ziemlich häßlich sein - spätestens, wenn der Compiler über mehrere Stufen aus Allem Alles wandeln kann.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1912258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1912258</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 14 Jun 2010 15:47:42 GMT</pubDate></item><item><title><![CDATA[Reply to Abfrageb, ob Objekt fehlerfrei erstellt wurde on Mon, 14 Jun 2010 15:43:47 GMT]]></title><description><![CDATA[<p>Naja, letztendlich heißt</p>
<pre><code class="language-cpp">if( !inputStream )
</code></pre>
<p>nichts anderes als</p>
<pre><code class="language-cpp">if( inputStream  == false)
</code></pre>
<p>oder auch</p>
<pre><code class="language-cpp">if( inputStream == NULL)
</code></pre>
<p>oder eben</p>
<pre><code class="language-cpp">if( inputStream == 0)
</code></pre>
<p>Im Prinzip heißt das nur, wenn dein File nicht geladen werden konnte dann ist der ursprüngliche Wert 0 noch vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1912259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1912259</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Mon, 14 Jun 2010 15:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to Abfrageb, ob Objekt fehlerfrei erstellt wurde on Mon, 14 Jun 2010 19:41:36 GMT]]></title><description><![CDATA[<p>anti-freak schrieb:</p>
<blockquote>
<p>[...]</p>
<p>Im Prinzip heißt das nur, wenn dein File nicht geladen werden konnte dann ist der ursprüngliche Wert 0 noch vorhanden.</p>
</blockquote>
<p>Mit den von Simon angesprochenen Konvertierungs-Problematiken. Der oben verlinkte Artikel diskutiert das ausführlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1912421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1912421</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 14 Jun 2010 19:41:36 GMT</pubDate></item></channel></rss>