<?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[Eigene Klassenbibliothek]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach langem Überlegen habe ich mich dazu durchgerungen, meine intern verwendete Klassenbibliothek doch zu veröffentlichen.</p>
<p>Bevor ich mir aber die Mühe mache, die Quelldateien in einen Zustand zu bringen, daß sie veröffentlicht werden können, wollte ich fragen, ob überhaupt ein Interesse besteht.</p>
<p>Deshalb gibt es hier schon mal eine Einführung zur Bibliothek:</p>
<p><a href="http://www.cresd.de/edv/ger/Products/gaklib.pdf" rel="nofollow">http://www.cresd.de/edv/ger/Products/gaklib.pdf</a></p>
<p>Die wichtigsten (Basis)klassen sind:</p>
<p>STRING<br />
Funktionen und Klassen zur Zeichenkettenbehandlung</p>
<p>Container<br />
Speicherverwaltung</p>
<p>XML_ELEMENT<br />
XML-Prozessoren.</p>
<p>HTML_BASE<br />
HTML-Prozessoren</p>
<p>Daneben gibt es Klassen für HTTP-Clients und -Server, XSLT-Transformation, Xschemavalidierung und CSS-Parser.</p>
<p>Über eine Rückmeldung (auch konstruktive Kritik) würde ich mich freuen.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327315/eigene-klassenbibliothek</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 18:59:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327315.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Aug 2014 01:34:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 01:34:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>nach langem Überlegen habe ich mich dazu durchgerungen, meine intern verwendete Klassenbibliothek doch zu veröffentlichen.</p>
<p>Bevor ich mir aber die Mühe mache, die Quelldateien in einen Zustand zu bringen, daß sie veröffentlicht werden können, wollte ich fragen, ob überhaupt ein Interesse besteht.</p>
<p>Deshalb gibt es hier schon mal eine Einführung zur Bibliothek:</p>
<p><a href="http://www.cresd.de/edv/ger/Products/gaklib.pdf" rel="nofollow">http://www.cresd.de/edv/ger/Products/gaklib.pdf</a></p>
<p>Die wichtigsten (Basis)klassen sind:</p>
<p>STRING<br />
Funktionen und Klassen zur Zeichenkettenbehandlung</p>
<p>Container<br />
Speicherverwaltung</p>
<p>XML_ELEMENT<br />
XML-Prozessoren.</p>
<p>HTML_BASE<br />
HTML-Prozessoren</p>
<p>Daneben gibt es Klassen für HTTP-Clients und -Server, XSLT-Transformation, Xschemavalidierung und CSS-Parser.</p>
<p>Über eine Rückmeldung (auch konstruktive Kritik) würde ich mich freuen.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411838</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 01:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 02:19:05 GMT]]></title><description><![CDATA[<p>Highlights (mit kleinen Einfügungen):</p>
<p>ARRAY&lt;OBJ&gt;<br />
Ein dynamisches Array.<br />
Beim Zugriff auf ein Index,<br />
der noch nicht exisitert,<br />
wird einfach das Array<br />
entsprechend erweitert.<br />
Wir wollen nämlich Logikfehler<br />
vertuschen, statt sie zu behandeln.</p>
<p>SEARCHABLE_ARRAY&lt;OBJ&gt;<br />
Ein Array, das durchsucht<br />
werden kann. &lt;algorithm&gt;<br />
ist nämlich total doof.</p>
<p>ARRAY_OF_DOUBLES<br />
Ein Array mit<br />
Fließkommazahlen.<br />
Lässt sich einfacher<br />
tippen als ARRAY&lt;double&gt;.</p>
<p>CONTAINER<br />
Basis für die<br />
Containerklassen. Alles ist<br />
besser, wenn es nach Java<br />
riecht.</p>
<p>DOUBLE_LIST<br />
Basis für alle Elemente der<br />
verketteten Liste. Mein<br />
Bewerbungsbeitrag zu the<br />
daily wtf.</p>
<p>LIST_CONTAINER<br />
Container für eine<br />
verkettete Liste. Kann<br />
verschieden Objekte<br />
speichern, sie müssen nur<br />
von DOUBLE_LIST<br />
abgeleitet sein. Heute back<br />
ich, morgen brau ich und<br />
übermorgen schreibe ich ein<br />
Buch über Wurstbrote und<br />
Supermärkte.</p>
<p>SIMPLE_SORTED_ARRAY&lt;OBJ&gt;<br />
Eine einfache sortierte<br />
Liste. Sie müssen keine<br />
Vergleichsfunktion<br />
angeben. Die eingebaute<br />
Vergleichsfunktion,<br />
erwartet, daß der Operator<br />
!= -1 zurückliefert, wenn<br />
der linke Operand kleiner<br />
ist, 0 wenn beide gleich<br />
sind und +1 wenn der<br />
rechte Operand kleiner ist.<br />
Bazinga!</p>
<p>RANDOM_ARRAY<br />
Wie ARRAY, aber nicht benutzte<br />
Elemente werden mit zufälligen<br />
Daten gefüllt.</p>
<p>SORTED_ARRAY&lt;OBJ&gt;<br />
Ein Array, das sortiert<br />
werden kann.</p>
<p>SORTED_CONTAINER<br />
Eine verkettete Liste, die<br />
sortiert werden kann.</p>
<p>GcObject<br />
Basisklasse, für Objekte,<br />
die automatisch gelöscht<br />
werden können, wenn es<br />
keinen Zeiger mehr auf sie<br />
gibt.</p>
<p>Prima, um in Erinnerungen zu schwelgen. Lange keinen so klaren 80-er-Jahre-Stil mehr gesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411842</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 04 Aug 2014 02:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 02:41:24 GMT]]></title><description><![CDATA[<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411843</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 04 Aug 2014 02:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 04:41:48 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
</blockquote>
<p>Viel mehr fehlt eigentlich RANDOM_OBJECT.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> Danke für die Arbeit. <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>@TE Heißt &quot;intern&quot; der Kram steht tatsächlich in irgendeinem Programm? Der wird benutzt?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411845</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 04 Aug 2014 04:41:48 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 07:40:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Highlights (mit kleinen Einfügungen):</p>
<p>ARRAY&lt;OBJ&gt;<br />
Ein dynamisches Array.<br />
Beim Zugriff auf ein Index,<br />
der noch nicht exisitert,<br />
wird einfach das Array<br />
entsprechend erweitert.<br />
Wir wollen nämlich Logikfehler<br />
vertuschen, statt sie zu behandeln.</p>
</blockquote>
<p>Stimmt, das ist ein Punkt, der mich auch immer wieder nervt. Vor allen, weil der operator [] daher nicht const sein darf.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>SEARCHABLE_ARRAY&lt;OBJ&gt;<br />
Ein Array, das durchsucht<br />
werden kann. &lt;algorithm&gt;<br />
ist nämlich total doof.</p>
</blockquote>
<p>Viele Klassen sind sehr alt, da gab's noch keinen C++ ISO Standard.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>ARRAY_OF_DOUBLES<br />
Ein Array mit<br />
Fließkommazahlen.<br />
Lässt sich einfacher<br />
tippen als ARRAY&lt;double&gt;.</p>
</blockquote>
<p>Der kann aber weder 'nen Mittelwert noch die Summe bilden.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>RANDOM_ARRAY<br />
Wie ARRAY, aber nicht benutzte<br />
Elemente werden mit zufälligen<br />
Daten gefüllt.</p>
</blockquote>
<p>Wozu das?</p>
<p>volkard schrieb:</p>
<blockquote>
<p>Prima, um in Erinnerungen zu schwelgen. Lange keinen so klaren 80-er-Jahre-Stil mehr gesehen.</p>
</blockquote>
<p>90er Jahre bitte. In den 80er habe ich mit C++ noch nix am Hut gehabt.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411859</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 07:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 07:43:56 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
</blockquote>
<p>Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411860</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 07:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 07:55:03 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
</blockquote>
<p>Viel mehr fehlt eigentlich RANDOM_OBJECT.</p>
</blockquote>
<p>Was sollte dies tun?</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> Danke für die Arbeit. <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>@TE Heißt &quot;intern&quot; der Kram steht tatsächlich in irgendeinem Programm? Der wird benutzt?^^</p>
</blockquote>
<p>Klar wird die benutzt. Der XSLT-Prozessor funkt auch recht gut.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411861</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 07:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 08:12:04 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
</blockquote>
<p>Warum?</p>
</blockquote>
<p>dein Ironie-Detektor ist kaputt.</p>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Viele Klassen sind sehr alt, da gab's noch keinen C++ ISO Standard.</p>
</blockquote>
<p>Heute gibt es aber den Standard und heutige Programme sollten diesen auch nutzen. Warum sollte jemand bspw. Interese an deinem STRING haben, wenn er doch std::string verwenden kann?</p>
<p>Ich habe ganz bestimmt kein Interesse an einer Bibliothek, die im Programmierstil der 90er aufgebaut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411864</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 04 Aug 2014 08:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 08:40:36 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Highlights (mit kleinen Einfügungen):</p>
<p>...</p>
<p>Prima, um in Erinnerungen zu schwelgen. Lange keinen so klaren 80-er-Jahre-Stil mehr gesehen.</p>
</blockquote>
<p>YMMD <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2411868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411868</guid><dc:creator><![CDATA[danke volkard]]></dc:creator><pubDate>Mon, 04 Aug 2014 08:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 08:50:26 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Also was mich an der Lib besonders stoert, ist dass es keine Basisklasse OBJECT gibt, von der alle Klassen abgeleitet sind. Dadurch wirkt die Lib so inkonsistent.</p>
</blockquote>
<p>Warum?</p>
</blockquote>
<p>dein Ironie-Detektor ist kaputt.</p>
</blockquote>
<p>Meiner funktioniert. Aber wie sieht's mit Deinem aus <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>daddy_felix schrieb:</p>
<blockquote>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Viele Klassen sind sehr alt, da gab's noch keinen C++ ISO Standard.</p>
</blockquote>
<p>Heute gibt es aber den Standard und heutige Programme sollten diesen auch nutzen. Warum sollte jemand bspw. Interese an deinem STRING haben, wenn er doch std::string verwenden kann?</p>
<p>Ich habe ganz bestimmt kein Interesse an einer Bibliothek, die im Programmierstil der 90er aufgebaut ist.</p>
</blockquote>
<p>Stimmt, für die Container- und Stringklassen bietet der Standard gleichwertigen Ersatz. Soll ich aber diese Klassen in der Doku deshalb ignorieren?</p>
<p>Interesant könnte aber die Bibliothek wegen dem XML-, HTML-, CSS-, HTTP-, XSLT-, XSchema- und XPath-Zeugs etc. sein. Oder bietet der Standard dafür auch Lösungen? Aber ich sehe schon, ich kann mir wohl die weitere Mühe sparen, das Ding zu veröffentlichen. Hab ich auch kein Problem damit. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411870</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 08:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 08:59:13 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Stimmt, für die Container- und Stringklassen bietet der Standard gleichwertigen Ersatz. Soll ich aber diese Klassen in der Doku deshalb ignorieren?</p>
</blockquote>
<p>Nein, nicht ignorieren. Du sollst sie aus der Lib komplett rausschmeißen und stattdessen die Standard-Klassen verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411873</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 04 Aug 2014 08:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 09:26:38 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Stimmt, für die Container- und Stringklassen bietet der Standard gleichwertigen Ersatz. Soll ich aber diese Klassen in der Doku deshalb ignorieren?</p>
</blockquote>
<p>Nein, nicht ignorieren. Du sollst sie aus der Lib komplett rausschmeißen und stattdessen die Standard-Klassen verwenden.</p>
</blockquote>
<p>Für Container kann dies wahrscheinlich sogar mit vertretbaren Aufwand gemacht werden. Bei STRING wird's schon etwas aufwendiger, da STRING-Objekte wissen, ob Umlaute ANSI-kodiert oder UTF-8 kodiert werden müssen. Datei-operationen wissen das auch und verwenden unter Windows dann die entsprechenden wchar_t bzw. Unicode varianten. Beispiel:</p>
<p>strFiles.h:</p>
<pre><code>#ifndef __GNUC__
int strStat( const STRING &amp;path, struct stat *statbuff );
#else
inline int strStat( const STRING &amp;path, struct stat *statbuff )
{
	return stat( path, statbuff );
}

#endif
</code></pre>
<p>strFiles.cpp:</p>
<pre><code>int strStat( const STRING &amp;path, struct stat *statbuff )
{
	int	result;

	if( path.getCharSet() == STR_UTF8 )
	{
		uSTRING	wPath;

		wPath.decodeUTF8( path );
#if defined( __BORLANDC__ )
#	if __BORLANDC__ &gt; 0x0520
		result = _wstat( wPath.getString(), (struct _stat *)statbuff );
	#else
		result = _wstat( wPath.getString(), statbuff );
	#endif
#elif defined _MSC_VER
		struct _stat64i32	vs2010Buff;
		result = _wstat( wPath.getString(), &amp;vs2010Buff );
		statbuff-&gt;st_atime = vs2010Buff.st_mode;
		statbuff-&gt;st_ctime = vs2010Buff.st_ctime;
		statbuff-&gt;st_dev = vs2010Buff.st_dev;
		statbuff-&gt;st_gid = vs2010Buff.st_gid;
		statbuff-&gt;st_ino = vs2010Buff.st_ino;
		statbuff-&gt;st_mode = vs2010Buff.st_mode;
		statbuff-&gt;st_mtime = vs2010Buff.st_mtime;
		statbuff-&gt;st_nlink = vs2010Buff.st_nlink;
		statbuff-&gt;st_rdev = vs2010Buff.st_rdev;
		statbuff-&gt;st_size = vs2010Buff.st_size;
		statbuff-&gt;st_uid = vs2010Buff.st_uid;
#endif

	}
	else
	{
		result = stat( path, statbuff );
	}

	return result;
}
</code></pre>
<p>std::string kann das meines Wissens von sich aus nicht. Also brauche ich dafür sowieso eine eigene Klasse.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411882</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 09:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 09:49:28 GMT]]></title><description><![CDATA[<p>Dir ist aber bewusst, dass man in C++ freie Funktionen schreiben kann, um Funktionalität bestehender Klassen zu erweitern? Dass man 5 Klassen für sortierbare, zufällig füllbare, mittelwert-berechenbare, selbst-erweiternde und nichtskönnende Container schreibt, ist absoluter Unsinn.</p>
<p>Schau dir vielleicht mal die STL-Algorithmen an. Dann wird dir bewusst, warum die STL derart mächtig ist, obwohl die einzelnen Container relativ wenige Operationen anbieten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411892</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2014 09:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 10:12:11 GMT]]></title><description><![CDATA[<p>Naja, Unicode ist trotzdem tricky.<br />
Ich hab mir auch eigene String-Klassen und IOStreams geschrieben, die mit Multibytenecodings klar kommen.<br />
Ich habe allerdings trotzdem so viel wie möglich von der STL genutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411899</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 04 Aug 2014 10:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 10:17:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Dir ist aber bewusst, dass man in C++ freie Funktionen schreiben kann, um Funktionalität bestehender Klassen zu erweitern? Dass man 5 Klassen für sortierbare, zufällig füllbare, mittelwert-berechenbare, selbst-erweiternde und nichtskönnende Container schreibt, ist absoluter Unsinn.</p>
<p>Schau dir vielleicht mal die STL-Algorithmen an. Dann wird dir bewusst, warum die STL derart mächtig ist, obwohl die einzelnen Container relativ wenige Operationen anbieten.</p>
</blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen. Zuerst kam die Anforderung, prä-standard eine Containerklasse zu bauen: Zack, fertig. Danach kam die Änderung, dass der Container sortierbar sein soll: Memberfunktion hinzugefügt, fertig. Und so nimmt das Unheil seinen Lauf, man erweitert und spezialisiert ohne klares Konzept und hinterher hat man X Klassen, die alle Ähnliches tun, aber doch unterschiedlich sind. Und wenn das Zeugs erst ein mal im Produktivcode eingesetzt wird tut man sich schwer damit, das Interface zu ändern.</p>
<p>Vor 20 Jahren hätte ich mir vielleicht überlegt, das einzusetzen, aber heute mit der STL und boost: Nein, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411901</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 04 Aug 2014 10:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 10:46:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Dir ist aber bewusst, dass man in C++ freie Funktionen schreiben kann, um Funktionalität bestehender Klassen zu erweitern? Dass man 5 Klassen für sortierbare, zufällig füllbare, mittelwert-berechenbare, selbst-erweiternde und nichtskönnende Container schreibt, ist absoluter Unsinn.</p>
<p>Schau dir vielleicht mal die STL-Algorithmen an. Dann wird dir bewusst, warum die STL derart mächtig ist, obwohl die einzelnen Container relativ wenige Operationen anbieten.</p>
</blockquote>
<p>Was ist besser?</p>
<pre><code>class ARRAY_OF_DOUBLES : public ARRAY&lt;double&gt;
{
	public:
	double sum( void ) const;
	double average( void ) const
	{
		return sum() / (double)getNumElements();
	}
};
</code></pre>
<p>oder</p>
<pre><code>double sum( ARRAY&lt;double&gt; &amp;array );
double average( ARRAY&lt;double&gt; &amp;array ) const;
</code></pre>
<p>OK letzteres könnte man auch über templates realisieren, um dann nicht nur doubles zu summieren sondern auch ints oder Äpfel. Aber solange das nicht notwendig ist, ist das egal. Mir gefällt ersteres dabei besser.</p>
<p>Die STL muß halt viele Bedürfnisse erfüllen können. Klar ist die dadurch viel mächtiger wie meine Bibliothek.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411910</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 10:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:09:05 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Was ist besser?</p>
<pre><code>class ARRAY_OF_DOUBLES : public ARRAY&lt;double&gt;
{
	public:
	double sum( void ) const;
	double average( void ) const
	{
		return sum() / (double)getNumElements();
	}
};
</code></pre>
<p>oder</p>
<pre><code>double sum( ARRAY&lt;double&gt; &amp;array );
double average( ARRAY&lt;double&gt; &amp;array ) const;
</code></pre>
<p>OK letzteres könnte man auch über templates realisieren, um dann nicht nur doubles zu summieren sondern auch ints oder Äpfel. Aber solange das nicht notwendig ist, ist das egal. Mir gefällt ersteres dabei besser.</p>
</blockquote>
<p>Es ist ganz klar das zweite besser.<br />
z.B. schonmal deswegen, weil du damit keine Probleme bekommst wenn du mal ein <code>ARRAY&lt;double&gt;</code> statt eines <code>ARRAY_OF_DOUBLES</code> übergeben bekommst, und dann <code>sum</code> oder <code>average</code> drauf machen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411919</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:06:33 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen.</p>
</blockquote>
<p>Das war aber nicht die Frage, die Frage war ob Interesse an der Library bestehen könnte.<br />
Und die Antwort darauf ist wohl nicht abhängig davon wie und warum die Library gewachsen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411920</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:07:30 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<pre><code>double sum( ARRAY&lt;double&gt; &amp;array );
double average( ARRAY&lt;double&gt; &amp;array ) const;
</code></pre>
</blockquote>
<p>Wenn überhaupt dann mit const reference. Wie kommt das, dass Du eine zig Jahre an einer Klassenbibliothek arbeitest und noch nicht mal const correctness verstehst? Ich würde so eine Klassenbibliothek nicht weiter anschauen, wenn der Autor so wenig C++-Know-How zeigt. Entschuldige die scharfen Worte aber manchmal ist es besser direkt zu sein.</p>
<p>Und übrigens: Statt einen konkreten Containertyp zu übergeben, solltes Du entweder einen Container über Template definieren oder gleich Iteratoren übergeben. Dann wird es generisch. Es schadet ja nicht, wenn die sum Funktion mehr kann, als für den aktuellen Anwendungsfall notwendig ist. Insbesondere wenn die sum Funktio bestandteil einer Bibliothek sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411921</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:19:07 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen.</p>
</blockquote>
<p>Nachzuvollziehen, wie sowas vor zwei Jahrzehnten entstanden ist, ist das eine, aber diese Bibliothek im Jahre 2014 noch zu verteidigen braucht doch einiges an Mut <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>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Mir gefällt ersteres dabei besser.</p>
</blockquote>
<p>Warum? Wegen der Syntax?</p>
<p>D.h. du schränkst die Berechnung des Mittelwertes auf Klassen ein, die genau dafür konzipiert wurden, und machst alle anderen inkompatibel? Wie mit Java-Interfaces?<br />
Und wenn du nun das Maximum berechnen willst, leitest du eine neue Klasse ab? Und für das Produkt der Elemente ebenfalls?</p>
<p>Edit: hustbaer, habe erst jetzt gesehen dass du das korrigiert hast. Darum Quote geändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411925</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:20:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Edit: Sorry, habe erst jetzt gesehen dass du das korrigiert hast.</p>
</blockquote>
<p>Ja, ich meinte immer die &quot;ohne Ableitung&quot; Variante, hatte das erst nur verwechselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411927</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:51:06 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Wenn überhaupt dann mit const reference. Wie kommt das, dass Du eine zig Jahre an einer Klassenbibliothek arbeitest und noch nicht mal const correctness verstehst?</p>
</blockquote>
<p>Wie kommst Du darauf, daß ich das nicht verstehe?</p>
<p>Der Index-operator ist leider nicht const. Das ist suboptiomal und sollte sicherlich mal geändert werden. Bin bis heute nur nicht dazu gekommen.</p>
<p>&lt;Nachtrag&gt;<br />
Hab vorhin nicht genau geschaut, dachte daß sum den Indexoperator benutzt und daher selber nicht const sein kann. Daher erwartete meine zweite Variante kein const reference. sum ist aber konst, weil es für den Zugriff auf die Elemente nicht den Index.operator benutzt. Dann hätte ich natürlich eine const variante benutzen können (gar müssen).<br />
&lt;/Nachtrag&gt;</p>
<p>tntnet schrieb:</p>
<blockquote>
<p>Ich würde so eine Klassenbibliothek nicht weiter anschauen, wenn der Autor so wenig C++-Know-How zeigt. Entschuldige die scharfen Worte aber manchmal ist es besser direkt zu sein.</p>
</blockquote>
<p>Ich kann damit leben. Viele Designentscheidungen, die ich vor 20 Jahren getroffen habe, würde ich heute sicherlich nicht nochmal machen. Der doofe Indexoperator gehört sicherlich dazu. Wie ich schon geschrieben habe, nervt der mich auch schon eine ganze Weile. Der Leidensdruck war aber bisher noch nicht groß genug. Die meisten Anwendungen, die diesen Container verwenden, benutzen auch createElement und addElement, um neue Eintrage einzufügen.</p>
<p>tntnet schrieb:</p>
<blockquote>
<p>Und übrigens: Statt einen konkreten Containertyp zu übergeben, solltes Du entweder einen Container über Template definieren oder gleich Iteratoren übergeben. Dann wird es generisch. Es schadet ja nicht, wenn die sum Funktion mehr kann, als für den aktuellen Anwendungsfall notwendig ist. Insbesondere wenn die sum Funktio bestandteil einer Bibliothek sein soll.</p>
</blockquote>
<p>Designziel der Bibliothek war ja auch nie eine eierlegende Wollmichsau bereitzustellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411933</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 11:44:17 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen.</p>
</blockquote>
<p>Nachzuvollziehen, wie sowas vor zwei Jahrzehnten entstanden ist, ist das eine, aber diese Bibliothek im Jahre 2014 noch zu verteidigen braucht doch einiges an Mut <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>
</blockquote>
<p>Wer verteidigt das denn? Daß hier einige Designentscheidungen doof waren und sind, habe ich nie abgestritten. Ganz im Gegenteil, das sind Punkte, die mich auch nerven.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Mir gefällt ersteres dabei besser.</p>
</blockquote>
<p>Warum? Wegen der Syntax?</p>
</blockquote>
<p>Ja.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>D.h. du schränkst die Berechnung des Mittelwertes auf Klassen ein, die genau dafür konzipiert wurden, und machst alle anderen inkompatibel? Wie mit Java-Interfaces?<br />
Und wenn du nun das Maximum berechnen willst, leitest du eine neue Klasse ab? Und für das Produkt der Elemente ebenfalls?</p>
</blockquote>
<p>Nein, denn dann kann <strong>ich</strong> einfach eine neue Memberfunktionen einführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411934</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 04 Aug 2014 11:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 12:27:58 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Warum? Wegen der Syntax?</p>
</blockquote>
<p>Ja.</p>
</blockquote>
<p>D.h. um <code>array.sum()</code> statt <code>sum(array)</code> zu schreiben, bist du bereit, die ganze Palette an Nachteilen in Kauf zu nehmen, ohne einen einzigen echten Vorteil?<br />
Was sind für dich Kriterien für guten Code?<br />
Wenn ich nun die Summe einer Liste berechnen will, diese aber keine <code>sum</code> -Methode anbietet, kann ich also nicht einheitlich <code>sum(container)</code> schreiben?</p>
<p>mgaeckler schrieb:</p>
<blockquote>
<p>Nein, denn dann kann <strong>ich</strong> einfach eine neue Memberfunktionen einführen.</p>
</blockquote>
<p>Erweiterbarkeit heisst also, dass man den Bibliotheksentwickler persönlich benachrichtigt, wenn man etwas erweitern will?<br />
Was machst du, wenn ich den Mittelwert von <code>float</code> s berechnen will?<br />
Oder wenn ich ein <code>ARRAY&lt;double&gt;</code> habe, muss ich das erst in ein <code>ARRAY_OF_DOUBLES</code> umkopieren, bevor ich den Mittelwert berechnen kann?</p>
<p>Ich hoffe, dich mit den Fragen etwas zum Nachdenken anzuregen <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/2411945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411945</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 04 Aug 2014 12:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 12:31:42 GMT]]></title><description><![CDATA[<p>Es ging um Summe und Durchschnitt.<br />
Dazu werden Summe und Anzahl als Attribute gehalten.<br />
Also darum, neben der ARRAY&lt;TYP&gt; auch eine ARRAY_WITH_SUM&lt;TYP&gt; anzubieten. Könnte ein Wrapper um ARRAY&lt;TYP&gt; sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411947</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 04 Aug 2014 12:31:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klassenbibliothek on Mon, 04 Aug 2014 12:55:59 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen.</p>
</blockquote>
<p>Das war aber nicht die Frage, die Frage war ob Interesse an der Library bestehen könnte.<br />
Und die Antwort darauf ist wohl nicht abhängig davon wie und warum die Library gewachsen ist.</p>
</blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne den Code jetzt schönreden zu wollen, aber wenn das Zeugs gewachsen ist kann ich das schon nachvollziehen.</p>
</blockquote>
<p>Nachzuvollziehen, wie sowas vor zwei Jahrzehnten entstanden ist, ist das eine, aber diese Bibliothek im Jahre 2014 noch zu verteidigen braucht doch einiges an Mut <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>
</blockquote>
<p>Nein, es besteht auch die Bitte um Kritik. Und wenn etwas kritisiert wird sollte man sich auch rechtfertigen dürfen, warum man das damals so gelöst hat. Einfach lapidar zu sagen &quot;wirf alles weg und stell deinen kompletten Client Code auf STL konforme Lösungen um&quot; kann´s ja wohl auch nicht sein. Technisch ist das sicherlich ein vernünftiger Vorschlag, aber da keiner von uns weiß, wieviel Client Code angefasst werden muss, ist er praktisch vielleicht nicht sinnvoll.</p>
<p>Ansonsten gehe ich mit euch d'accord (zumindest mit Nexus &amp; hustbaer).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411958</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 04 Aug 2014 12:55:59 GMT</pubDate></item></channel></rss>