<?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[Statische Exception-Methoden vererben]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hatte heute eine Idee, habe sie aber nicht ganz umgesetzt bekommen, ich hoffe ihr könnt mir da ein wenig weiterhelfen. Es geht um statische Methoden in Exception-Klassen die ich gerne weitervererben würde. Mal als Beispiel:</p>
<pre><code>// MainException:
static void checkString_empty(string testString) throw(MainException) {
	if (testString.size() == 0) {
		throw MainExcetion(ERROR_EMPTY_STRING);
	}
}
</code></pre>
<p>diese könnte ich ja dann einfach per</p>
<pre><code>MainException::checkString_empty(...);
</code></pre>
<p>überall einsetzen, was ich für eine recht angenehme Fehlerabfrage halte</p>
<p>Nun würde ich aber auch gerne Ableiten können. Eine abgeleitete Klasse XYZ_Exception sollte dann natürlich eine XYZ_Exception werfen.<br />
Ist sowas irgendwie zu bewerkstelligen, oder muss ich sie dann für jede abgeleitete Klasse einen override machen?</p>
<p>Vielen Dank schonmal!<br />
Narase</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339042/statische-exception-methoden-vererben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 13:09:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339042.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Jul 2016 11:59:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 11:59:31 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hatte heute eine Idee, habe sie aber nicht ganz umgesetzt bekommen, ich hoffe ihr könnt mir da ein wenig weiterhelfen. Es geht um statische Methoden in Exception-Klassen die ich gerne weitervererben würde. Mal als Beispiel:</p>
<pre><code>// MainException:
static void checkString_empty(string testString) throw(MainException) {
	if (testString.size() == 0) {
		throw MainExcetion(ERROR_EMPTY_STRING);
	}
}
</code></pre>
<p>diese könnte ich ja dann einfach per</p>
<pre><code>MainException::checkString_empty(...);
</code></pre>
<p>überall einsetzen, was ich für eine recht angenehme Fehlerabfrage halte</p>
<p>Nun würde ich aber auch gerne Ableiten können. Eine abgeleitete Klasse XYZ_Exception sollte dann natürlich eine XYZ_Exception werfen.<br />
Ist sowas irgendwie zu bewerkstelligen, oder muss ich sie dann für jede abgeleitete Klasse einen override machen?</p>
<p>Vielen Dank schonmal!<br />
Narase</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503919</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Fri, 29 Jul 2016 11:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 12:28:08 GMT]]></title><description><![CDATA[<p>was willst du damit erreichen? wozu hat deine exception klasse diese statische methode? eine exception ist eine ausnahme, und nicht - so wie du es verwendest - eine klasse, die funktionen zur verfügung stellt, um gewisse invarianten zu überprüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503925</guid><dc:creator><![CDATA[dove]]></dc:creator><pubDate>Fri, 29 Jul 2016 12:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 13:20:58 GMT]]></title><description><![CDATA[<p>Die Idee dahinter ist halt dass ich einfach die Exceptionklasse auch direkt die Bedingung prüfen lasse, praktisch eine Abwandlung von assert(). Finde es angenehmer als in jede Klasse die ich schreibe die gleiche Methode zu implementieren die mir einen String prüft</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503936</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Fri, 29 Jul 2016 13:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 13:32:18 GMT]]></title><description><![CDATA[<p>Narase schrieb:</p>
<blockquote>
<p>in jede Klasse die ich schreibe die gleiche Methode zu implementieren die mir einen String prüft</p>
</blockquote>
<p>Warum packst du sie in eine Klasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503938</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 29 Jul 2016 13:32:18 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 14:04:02 GMT]]></title><description><![CDATA[<p>Narase schrieb:</p>
<blockquote>
<p>Die Idee dahinter ist halt dass ich einfach die Exceptionklasse auch direkt die Bedingung prüfen lasse, praktisch eine Abwandlung von assert(). Finde es angenehmer als in jede Klasse die ich schreibe die gleiche Methode zu implementieren die mir einen String prüft</p>
</blockquote>
<p>wenn du gewisse vor- (oder nachbedingungen, in diesem sinne: <a href="https://de.wikipedia.org/wiki/Design_by_contract" rel="nofollow">https://de.wikipedia.org/wiki/Design_by_contract</a> ) prüfen willst, ist es momentan wohl am besten, das makro &quot;Ensures&quot; aus der guideline support library zu verwenden. der vorteil davon ist, dass es in zukunft sehr leicht möglich sein wird, dass dann direkt in C++ (in form von attributen) ausdrücken zu können.</p>
<p>du willst nämlich sicher nicht, dass am ende ein user mit irgendeiner seltsamen fehlermeldung wie &quot;string länge ist null&quot; konfrontiert wird, oder? überlege dir gut das design!</p>
<pre><code class="language-cpp">#include &quot;gsl_assert.h&quot;
//...
void (string foo) {
  Expects(foo.size() &gt; 0);
  //...
}

//später
void (string foo) 
  &lsqb;&lsqb;expects: foo.size() &gt; 0&rsqb;&rsqb;
{
 //...
}
</code></pre>
<p>(hier: <a href="https://github.com/Microsoft/GSL/" rel="nofollow">https://github.com/Microsoft/GSL/</a> )</p>
<p>auf deine art und weise muss du überall, wo du deine invarianten überprüfen willst, die exception-klasse einbinden. die exception-klasse brauchst du aber eigentlich nur, wenn du sie wirfst - oder an der stelle, wo du den fehler behandelst.</p>
<p>übrigens:<br />
explizite exception-spezifikationen sind deprecated</p>
<pre><code class="language-cpp">throw(MainException) //geht bald (!) nicht mehr!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503943</guid><dc:creator><![CDATA[dovve]]></dc:creator><pubDate>Fri, 29 Jul 2016 14:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 14:28:23 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Narase schrieb:</p>
<blockquote>
<p>in jede Klasse die ich schreibe die gleiche Methode zu implementieren die mir einen String prüft</p>
</blockquote>
<p>Warum packst du sie in eine Klasse?</p>
</blockquote>
<p>Wo soll ich sie sonst haben? Statisch in irgendeiner Source? Eine Klasse die die Funktion braucht muss sie auch implementieren.</p>
<p>@dovve<br />
das hört sich soweit gut an, gilt es dann nur für Vorbedingungen?<br />
Wenn ich zb sowas mache</p>
<pre><code>string s;
s = readLineFromAFile().trim();
</code></pre>
<p>würde die neue Funktion so etwas abfangen können oder steh ich damit dann eher schlecht dar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503949</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Fri, 29 Jul 2016 14:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 14:54:46 GMT]]></title><description><![CDATA[<p>Narase schrieb:</p>
<blockquote>
<p>Statisch in irgendeiner Source?</p>
</blockquote>
<p>Nein</p>
<p>Narase schrieb:</p>
<blockquote>
<p>Eine Klasse die die Funktion braucht muss sie auch implementieren.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503952</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 29 Jul 2016 14:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Fri, 29 Jul 2016 15:14:36 GMT]]></title><description><![CDATA[<p>Narase schrieb:</p>
<blockquote>
<p>Wo soll ich sie sonst haben? Statisch in irgendeiner Source? Eine Klasse die die Funktion braucht muss sie auch implementieren.</p>
</blockquote>
<p>Wie wäre es als freie Funktion in einem Namespace? Wobei ich noch immer nicht so wirklich den Sinn sehe.</p>
<p>Narase schrieb:</p>
<blockquote>
<p>das hört sich soweit gut an, gilt es dann nur für Vorbedingungen?</p>
</blockquote>
<p>Expects für Pre- und Ensures für Post-Conditions. Siehe: <a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-pre" rel="nofollow">https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-pre</a></p>
<p>Narase schrieb:</p>
<blockquote>
<p>Wenn ich zb sowas mache</p>
<pre><code>string s;
s = readLineFromAFile().trim();
</code></pre>
<p>würde die neue Funktion so etwas abfangen können oder steh ich damit dann eher schlecht dar?</p>
</blockquote>
<p>std::string hat kein trim() - kommst du von Java? Das würde auch erklären, warum du ne statische Funktion in der Klasse willst und wo das throw(MainException) herkommt.</p>
<p>Aber allgemein: WAS soll da abgefangen werden (was ist &quot;so etwas&quot;)?<br />
a) Fehler beim Lesen -&gt; könnte ne Exception sein<br />
b) String ist nach dem trim leer -&gt; sowas sollte keine Exception sein, das ist ja ein ganz normaler Fall und keine Ausnahme, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503953</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Fri, 29 Jul 2016 15:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Sat, 30 Jul 2016 09:41:05 GMT]]></title><description><![CDATA[<p>Das mit dem Java war fast richtig. War meine erste Sprache, hab aber in letzter Zeit viel mit Qt gearbeitet, da gibt es trimmed(), komme wohl langsam etwas durcheinander.</p>
<p>Mein Grundgedanke ist konkret dieser: Ich lese daten aus einer XML aus. Nun sollen die Daten in der XML nicht leer sein, ich könnte also hingehen und jedes mal</p>
<pre><code>if (string.size() &lt; 1){
    throw Exception(&quot;Blah&quot;);
}
</code></pre>
<p>dazwischen packen. Das würde aber meinen Code zumüllen. Ich könnte auch jedes mal sowas implementieren</p>
<pre><code>string Classname::checkString(string test, string msg){
    if (test.size() &lt; 1){
        throw Exception(msg);
    }
    return test;
}
</code></pre>
<p>Diese Methode könnte ich einfach um den read herumpacken, damit wäre ich den Klotz schonmal weg.<br />
Aber wenn ich sie nun in verschiedenen Klasse brauche könnte ich sie...<br />
1. ... in jeder Klasse definieren. Abgelehnt wegen Redundanz<br />
2. ... als public in einer Klasse definieren und eine Instanz von ihr erstellen. Auch abgelehnt<br />
3. ... in eine Source packen und sie einfach so statisch machen. Fände ich auch unschön, außerdem kommt Eclipse mit sowas nicht sonderlich gut zurecht</p>
<p>Ich habe 2 Klassen, beide haben ihre eigene Execption-Klasse.<br />
class Person; PersonException<br />
class Animal; AnimalException<br />
Beide Klasse lesen im Konstruktor ihre Attribute aus einer XML (warum, lassen wir mal dahingestellt).<br />
Wenn beide Exceptions von MainException erben und es so funktionieren würde wie ich mir das vorstelle, könnte ich einfach beide male die jeweilige Exception-Klasse nutzen um die Prüfungen der XML-Daten zu machen. Da es nicht funktioniert bin ich auf andere Methoden angewiesen, von denen jede so ihre Nachteile hat, ganz oben dabei die Redundanz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503996</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Sat, 30 Jul 2016 09:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Sat, 30 Jul 2016 10:05:24 GMT]]></title><description><![CDATA[<p>4. ... Eine Funktion schreiben. Ohne static!</p>
<p>Dein Konzept mit Zuordnung Klasse &lt;-&gt; Exceptionklasse ist sehr merkwürdig. Aber wenn du es unbedingt so willst:</p>
<p>5. ... eine Templatefunktion mit der Exeptionklasse als Templateparameter. Ohne static! Mit using kann man die Schreibweise sogar abkürzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503997</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 30 Jul 2016 10:05:24 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Sat, 30 Jul 2016 12:40:35 GMT]]></title><description><![CDATA[<p>Die Idee mit dem Template ist gar nicht mal so verkehrt<br />
Wie genau würde das mit der Kürzung per using funktionieren? Hab mir gerade die cpp-Referenz dazu durchgelesen, so ganz komme ich nicht dahinter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2504008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2504008</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Sat, 30 Jul 2016 12:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Sun, 31 Jul 2016 13:09:31 GMT]]></title><description><![CDATA[<p>Narase schrieb:</p>
<blockquote>
<p>Wie genau würde das mit der Kürzung per using funktionieren? Hab mir gerade die cpp-Referenz dazu durchgelesen, so ganz komme ich nicht dahinter.</p>
</blockquote>
<p>Hm, war leider ein Irrtum, das geht nur mit Typen, nicht mit Funktionen.</p>
<p>Aber wie gesagt, dein Konzept ist merkwürdig. Der Typ der Exception sollte Informationen über den Fehler beinhalten und nicht über die Klasse, aus der sie geworfen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2504088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2504088</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 31 Jul 2016 13:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Exception-Methoden vererben on Sun, 31 Jul 2016 20:36:27 GMT]]></title><description><![CDATA[<p>Wahrscheinlich hast du recht, ich werd mal schauen dass ich mir ein kleines Konzept mit Nicht-Klassen Methoden erdenke.<br />
Vielen Dank dir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2504164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2504164</guid><dc:creator><![CDATA[Narase]]></dc:creator><pubDate>Sun, 31 Jul 2016 20:36:27 GMT</pubDate></item></channel></rss>