<?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[C++ ohne STL?]]></title><description><![CDATA[<p>Ein Prof. meinte neulich zu uns, dass C++ ohne die STL genauso gut für ressourcenschwache Architekturen geeignet ist wie C wenn ein passender Compiler vorhanden ist.</p>
<p>Wie darf ich das jetzt verstehen - soll ich dann meine eigene String-Klasse aus char* bauen, meine eigenen Container+Speicherverwaltung? Wie ist das dann mit dem FileIO, basiert das nicht auch auf der STL? Muss ich dann meine eigenen Klassen aus den C-Funktionen bauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/122997/c-ohne-stl</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 14:48:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122997.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2005 07:04:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 07:04:37 GMT]]></title><description><![CDATA[<p>Ein Prof. meinte neulich zu uns, dass C++ ohne die STL genauso gut für ressourcenschwache Architekturen geeignet ist wie C wenn ein passender Compiler vorhanden ist.</p>
<p>Wie darf ich das jetzt verstehen - soll ich dann meine eigene String-Klasse aus char* bauen, meine eigenen Container+Speicherverwaltung? Wie ist das dann mit dem FileIO, basiert das nicht auch auf der STL? Muss ich dann meine eigenen Klassen aus den C-Funktionen bauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890243</guid><dc:creator><![CDATA[STL-User]]></dc:creator><pubDate>Wed, 12 Oct 2005 07:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 07:16:39 GMT]]></title><description><![CDATA[<p>warum nicht?<br />
printf zum bleistift.<br />
und wozu braucht es die string klasse *g*</p>
<p>wenns eben wenig platz gibt, muss man sich darauf einstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890251</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Wed, 12 Oct 2005 07:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 08:51:36 GMT]]></title><description><![CDATA[<p>STL-User schrieb:</p>
<blockquote>
<p>Ein Prof. meinte neulich zu uns, dass C++ ohne die STL genauso gut für ressourcenschwache Architekturen geeignet ist wie C wenn ein passender Compiler vorhanden ist.</p>
<p>Wie darf ich das jetzt verstehen - soll ich dann meine eigene String-Klasse aus char* bauen, meine eigenen Container+Speicherverwaltung? Wie ist das dann mit dem FileIO, basiert das nicht auch auf der STL?</p>
</blockquote>
<p>nu mal langsam. nicht alles der stl frißt gleich wahnsinnig resourcen. aber anderes der standardlib vielleicht noch mehr.<br />
zur zeit mußte auf std::cout verzichten, weil das ein wenig ungeschickt implemetiert ist und lahmer als printf ist und 100-200k code erzeugt.<br />
die sachen, die std::string macht, müßtest du auch selber machen, wenn du dynamische zeichenketten brauchst. daß man wo es geht, stringliterale benutzt, muß man sich halt angewöhnen, also nicht gerade</p>
<pre><code class="language-cpp">void log(string const&amp; fileName,string const&amp; line){
   //bitte nicht nachmachen, bloating verdirbt den charakter
   ofstream(fileName.c_str())&lt;&lt;line&lt;&lt;endl;
}
...
log(&quot;log.txt&quot;,&quot;server started&quot;);
</code></pre>
<p>andererseits sind die algorithmen nicht schlecht, schneller als std::sort wird dein prof auch nach wochen nicht sein. wenn er ein wenig codesize ausgaben mag für tolle laufzeit, isser hier richtig.</p>
<blockquote>
<p>Muss ich dann meine eigenen Klassen aus den C-Funktionen bauen?</p>
</blockquote>
<p>damit holste einiges raus, wenn du für schwache rechner coden willst, denn die stl ist für normale rechner optimiert. außerdem in ein paar aspekten einfach verschwenderisch. normalerweise dürfte es aber vollauf genügen, auf std::cout zu verzichten und der code sollte schon recht klein sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890345</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 08:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 08:55:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> nur mal so aus interesse: was findest du an den iostreams nicht so doll? klar, die handhabung ist nicht unbedingt einfach, aber das es gleich &quot;ungeschickt&quot; implementiert ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890351</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 12 Oct 2005 08:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 10:36:37 GMT]]></title><description><![CDATA[<p>Aus den C Funktionen würde ich nicht meine eigenen Klassen bauen, da diese teilweise auch sehr problematisch sind. Lieber ein solides Design von Grund auf. Aber im Grunde solltest du mal genau angucken was dein Compiler alles bietet und wie die Dinge implementiert sind. Ich würde eher so vorgehen, dass ich die Teile der STL ersetze, die mir nach eingehender Untersuchung zu langsam oder zu fett sind.</p>
<p>elise schrieb:</p>
<blockquote>
<p>printf zum bleistift.</p>
</blockquote>
<p>printf ist doch eher ein ideales Beispiel dafür, wo die C Library große Macken (auch im Bezug auf Resourcenverschwendung hat) :p</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a><br />
die sind zu `fett`. Schau dir mal an, wie sich die Binary-Größe verhält, wenn du statisch linkst und iostreams benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890436</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 12 Oct 2005 10:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 10:40:11 GMT]]></title><description><![CDATA[<p>Wenn sie nicht so fett wären, wären sie aber nicht so flexibel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890440</guid><dc:creator><![CDATA[fett]]></dc:creator><pubDate>Wed, 12 Oct 2005 10:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 10:41:22 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> nur mal so aus interesse: was findest du an den iostreams nicht so doll? klar, die handhabung ist nicht unbedingt einfach, aber das es gleich &quot;ungeschickt&quot; implementiert ist?</p>
</blockquote>
<p>wozu war noch mal open/close da? mir scheint das einfach ein relikt aus alten tagen, als man noch c-stylish programmieren wollte. und das verändern der puffer zu laufrzeit. die teuren locales. überhaupt total total viele optionen, die alle immer befragt werden müssen. statt cout&lt;&lt;hex&lt;&lt;100 müßte man doch cout&lt;&lt;hex(100) schreiben (keine status-informationen im stream für hex-ausgabe), oder? hat man sich das damals noch nicht vorstellen können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890443</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 10:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 14:13:03 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a> nur mal so aus interesse: was findest du an den iostreams nicht so doll? klar, die handhabung ist nicht unbedingt einfach, aber das es gleich &quot;ungeschickt&quot; implementiert ist?</p>
</blockquote>
<p>Da muß ich volkard recht geben. Die Iostreams sind sehr schlecht realisiert. Sie sind schlecht designed, langsam und schwer benutzbar.</p>
<p>Ein Beispiel sind die Modifier. Ein operator&lt;&lt; kann sie verändern ohne sie zurück zu setzen. Die Funktion muß extra Arbeit leisten um dies zu verhindern. Desweiteren sind die Modifier nicht erweiterbar, ich kann keine für meine eigenen Klassen definieren.</p>
<p>Ein weiterer schwerwiegendes Problem ist die Fehlerbehandlung. Eine Funktion muß ausdrücklich dafür sorgen, dass sie die Streams sich für eine Methode entscheiden. Tut sie dies nicht dann muß sie mit allen Sorten von Fehlerbehandlung fertig werden.</p>
<p>Ein weiteres Problem ist die Vermischung von Dateien und Strömenen. Wieso zum Teufel soll ein Strom seakbar sein? Nicht alle Ströme sind es, die meisten sogar nicht! Hier wird gegen ein grundlegendes Konzept der Vererbung verstoßen. Eine Basisklasse ist die Schnittmenge der abgeleitenen Klassen und nicht deren Union.</p>
<p>Desweiteren ist das Puffern Aufgabe der Stromquelle. Dies heißt stream_buf sollt nur ein virtuelle Methoden read und write enthalten. Wenn die Quelle gepuffert werden soll dann ist das die Aufgabe des Implementierers von write und read. Hier schießen die Iostreams über ihre Aufgabe hinaus.</p>
<p>Dann was bringt die Verbindung von Ein - und Ausgabe? Was ist der Vorteil von foo(iostream&amp;) gegenüber von foo(istream&amp;, ostream&amp;)? Ich sehe nur Nachteile.</p>
<p>Desweiteren müßten die Eingabefunktionen auch eine Möglichkeit haben den Strom bei einem Formatsfehler in einem ordentlichen Zustand zu belassen. Man kann nicht immer mit einem Zeichen im voraus bestimmen ob eine Eingabe scheitert oder nicht. Darum muß man mehrere Zeichen einlesen. Wenn es nun aber scheitert? Was machen wir mit den eingelesenen Zeichen? Die einzige Möglichkeit wäre sie über putback in den Strom zuück zu schieben. Auch wenn es sehr schwerfällig ist ist es aber der richtige Ansatz nur, dass es nicht hier garantiert ist, dass putback auch funktioniert. putback muß nähmlich nicht eine unbegrenzte Anzahl von Zeichen annehmen. Desweiteren wäre es im Exceptionfall auch nicht sicher da ein new gebraucht werden muß. Dies macht die istreams für kompliziertere Formate nutzlos.</p>
<p>Desweitern ist es für mich ein Rätzel wie man mit nur Strömen 200kb füllen kann.</p>
<p>kingruedi schrieb:</p>
<blockquote>
<p>Aus den C Funktionen würde ich nicht meine eigenen Klassen bauen, da diese teilweise auch sehr problematisch sind. Lieber ein solides Design von Grund auf.</p>
</blockquote>
<p>Ich würde aber nicht auf strlen, strcpy, memcopy und memmove verzichten. Die meisten Compiler besitzen masgeschneiderte Optimirungsmethoden für sie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890685</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Wed, 12 Oct 2005 14:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 17:17:51 GMT]]></title><description><![CDATA[<p>ich mag nicht mehr als &quot;ungeschickt&quot; sagen. und meine größte hochachtung gilt denen, die damals die streams so gegossen haben, wie sie jetzt sind. es war neuland, und das, was sie vollbrachten ist beeindruckend gut für seine zeit. nu hat sich c++ ein wenig gewandelt in richtungen, die absolut nicht vorhersehbar waren, deswegen ein wenig ungeschickt aus heutiger sicht.<br />
ich beschäftige mich ja mit einer alternativen implemetierung und die zeichen stehen gut, daß ich damit baden gehe, weil meine nicht genug können und dafür nur ein fitzelchen schneller sind. die exe-größe ist kein argument, weil der brocken in ner dll (shared lib) zu liegen hat. und daß es open/close gibt, darf man ja ignorieren, wenn man mag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890822</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 17:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 18:04:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26836">@Topic</a>: Man kriegt vor allem mit Templates sehr leicht riesige Executables. Ich finde es nicht unbedingt besser, wie bei qsort einen Funktionszeiger zu übergeben, aber es ist platzsparender, als für jedes Vergleichskriterium bei ein und demselben Elementtyp das Template komplett neu zu instanzieren. Auf dieses Problem (wenn es sich als eines erweist) stößt man eben in der STL dauernd.</p>
<blockquote>
<p>ich beschäftige mich ja mit einer alternativen implemetierung und die zeichen stehen gut, daß ich damit baden gehe, weil meine nicht genug können und dafür nur ein fitzelchen schneller sind.</p>
</blockquote>
<p>Wenn du nur das EOF nicht so affig machst wie die iostreams, sind sie schon 10mal besser. Wie war das noch gleich? Es hielt sich lange das Gerücht, dass in Java Streams auf eine Exception enden, ohne dass man es verhindern könne und da wurde ja wahnsinnig drauf geschimpft. Jetzt scheint es eher auf die iostreams zuzutreffen, wenn man die Exceptions anschaltet, aber hier schimpft keiner? Benutzt keiner Exceptions bei I/O-Fehlern? Ich habe mir deine Streams noch nicht angeschaut, aber das EOF interessiert mich jetzt, daher werde ich sie mir mal runterladen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/890849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890849</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 12 Oct 2005 18:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 18:14:57 GMT]]></title><description><![CDATA[<p>Ich behaupte mal, dass nen C++ Compiler für so ne Plattform seine eigene kleine &quot;STL&quot; mitbringt die auch auf die Plattform angepasst ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/890862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890862</guid><dc:creator><![CDATA[User---]]></dc:creator><pubDate>Wed, 12 Oct 2005 18:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 18:28:29 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>aber es ist platzsparender, als für jedes Vergleichskriterium bei ein und demselben Elementtyp das Template komplett neu zu instanzieren. Auf dieses Problem (wenn es sich als eines erweist) stößt man eben in der STL dauernd.</p>
</blockquote>
<p>für sort müßte man nen zeiger auf less und einen auf swap übergeben. ungern. die inline-optimierung geht flöten. aber nette idee, einfach mal heap_sort zu nehmen, weils kleineren code macht als intro_sort.</p>
<p>[quoteWenn du nur das EOF nicht so affig machst wie die iostreams, sind sie schon 10mal besser.[/quote]<br />
ich denke daran, daß das normalverhalten ist, daß der user while(!eof) read() macht, aber wenn er zu weit liest ne exception fliegt. wie in java.<br />
aber egal, für was ich mich jetzt entscheide, messungen werden ergeben, daß es doch ganz anders hätte besser gemacht worden sein können wird (synaktisch korrekt?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890869</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 18:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 18:37:13 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ich mag nicht mehr als &quot;ungeschickt&quot; sagen. und meine größte hochachtung gilt denen, die damals die streams so gegossen haben, wie sie jetzt sind. es war neuland, und das, was sie vollbrachten ist beeindruckend gut für seine zeit. nu hat sich c++ ein wenig gewandelt in richtungen, die absolut nicht vorhersehbar waren, deswegen ein wenig ungeschickt aus heutiger sicht.</p>
</blockquote>
<p>Klar war es aus damaliger Sicht eine Meisterleistung allerdings sind sie für heutig Verhältnisse veraltet und müssten ausgetauscht oder stark verbessert werden. Wenn man sich C++ ohne Exceptions und Templates vorstellt dann sind sie gar nicht mal so schlecht. Allerdings ändert das nichts daran, dass man sie überarbeiten muß. Spätestens bei der Standardisirung hätten aber viele der Probleme klar sein müssen. Zu mindest das Problem mit den Exceptions liegt ja auf der Hand von daher sind die heutigen Standard Iostreams aus meiner persöhnlichen Sicht schlecht realisiert. Man hat einfach eine unausgereifte Idee zum Standard erhoben.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>ich beschäftige mich ja mit einer alternativen implemetierung und die zeichen stehen gut, daß ich damit baden gehe, weil meine nicht genug können und dafür nur ein fitzelchen schneller sind. die exe-größe ist kein argument, weil der brocken in ner dll (shared lib) zu liegen hat. und daß es open/close gibt, darf man ja ignorieren, wenn man mag.</p>
</blockquote>
<p>Ich hab mich auch schon seit einiger Zeit Gedanken über eine Implementirung von Streamklassen gemacht. Hier mal meine Vorschläge. Vielleicht sind ja eine brauchbare Ansätze dabei.</p>
<p>Modifier würde ich folgendermasen realisieren.</p>
<pre><code class="language-cpp">class Target{
public:
  virtual uint write(const char*, uint)=0;
};

class ostream{
public:
  template&lt;class T&gt;
  ostream&amp;operator&lt;&lt;(const T&amp;t){
    ::write(*this, t);
    return *this;
  }
private:
  Target*target;
};

template&lt;class T&gt;
class hex_modifed_ostream:public T{
public:
  explicit hex_modified_ostream(ostream&amp;out):
    T(out){}

  template&lt;class T&gt;
  hex_modified_ostream&amp;operator&lt;&lt;(const T&amp;t){
    T::opertor&lt;&lt;(t);
    return *this;
  }

  ostream&amp;operator&lt;&lt;(int i){
    // hex Implementirung
  }
private:
  ostream&amp;out;
};

template&lt;class ostreamT&gt;
void write(ostreamT&amp;out, int i)
{
  // dec Implementirung
}

template&lt;class ostreamT&gt;
void write(ostreamT&amp;out, char c)
{
  // ...
}

//...
struct Foo
{
  int a,b;
};

template&lt;class ostreamT&gt;
void write(ostreamT&amp;out, const Foo&amp;foo){
  out&lt;&lt;foo.a; 
  hex_modifed_ostream&lt;ostreamT&gt; hex_out(out);
  out&lt;&lt;foo.b;
}
// ...
ostream out;
foo(out); // einmal dec und einmal hex
hex_modifed_ostream&lt;ostream&gt; hex_out(out);
foo(hex_out); // zweimal hex
</code></pre>
<p>Ich sehe folgende Vorteile:</p>
<ul>
<li>Neue modifier können nach Lust und Laune definiert und in Kombination mit alten genutzt werden.</li>
<li>Eine Ausgabefunktion kann von Außen gesagt bekommen wie etwas zu formatiren ist. Sie kann diese Einstellung benutzen oder sie überschreiben und beim Beenden der Funktion ist die Überschreibung automatisch aufgehoben. Zum Beispiel wäre eine Funktion die ein vector&lt;T&gt; ausgibt doch gehandicapt wenn man T nicht formatieren könnte. Dein cout&lt;&lt;hex(100) Ansatz könnte da Probleme bereiten.</li>
</ul>
<p>Folgende Schwachpunkte sehe ich:</p>
<ul>
<li>Compiler muß gut inlinen können sonst kommt es zu Overheat.</li>
<li>Alle Ausgabefunktionen sind Templates. Dies dürfte eigentlich kein Problem sein wenn diese Funktion auch wirklich nur für die Ausgabe zuständig ist. Wenn spezielle Formatirung nötig ist (wie zum Beispiel bei int bin =&gt; dec) dann kann man auch auf eine Funktion zurückgreifen die ein String zurück gibt und den String ausgeben. Die Formatirungsfunktion muß ja nicht umbedingt ein Template sein.</li>
</ul>
<p>Ich hab noch nicht hiermit gearbeitet also könnten es versteckte Probeme geben.</p>
<p>Bei den Eingabeströmen weiß ich nicht so recht ob es eine gute Idee aber eventuel könnte man die Erkennung der Daten von deren Einlesung trennen. Ich hab schon mehrmals gute Erfahrungen mit der Trennung von Erkennung und Einlesung gemacht.</p>
<p>Um einen Puffer der die gelesenen Zeichen enthält bis, dass es sicher ist, dass die Eingabe korrekt oder falsch ist kommt man nicht umher.</p>
<pre><code class="language-cpp">istream in;
if(in.is_at&lt;int&gt;())
  do_bar_stuff(in)
else if(in.is_at&lt;Foo&gt;())
  do_foo_stuff(in))
</code></pre>
<p>Ein Foo anzulegen könnte kostspielig sein und nur um zu testen ob das nächste was der Stream enthält ein Foo ist eines anlegen zu müssen klingt verschwenderisch. Was sich auch als sehr nützlich erwiesen hat war ein was_at.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
bool istream::was_at(const T&amp;a){
  if(is_at&lt;T&gt;()){
    T b;
    *this&gt;&gt;b;
    if(b == a)
      return true;
    // nutze Puffer zeichen um Einlesen rückgängig zu machen
  }
  return false;
}
//...
vector&lt;int&gt;vec;
if(in.was_at('{'))
{
  do{
    int i;
    in&gt;&gt;i;
    vec.push_back(i);
  }while(in.was_at(','));
  if(!in.was_at('}'))
    throw format_error;
}
</code></pre>
<p>Keine Ahnung ob generel Purpose Streams dies brauchen. Ich hab es zu mindest als sehr nützlich empfunden.</p>
<p>So nun reißt meine Ideen mal in Stücke, damit ich nicht irgendwann über unerwachtete Probleme stolpere. <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>Optimizer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26836">@Topic</a>: Man kriegt vor allem mit Templates sehr leicht riesige Executables. Ich finde es nicht unbedingt besser, wie bei qsort einen Funktionszeiger zu übergeben, aber es ist platzsparender, als für jedes Vergleichskriterium bei ein und demselben Elementtyp das Template komplett neu zu instanzieren. Auf dieses Problem (wenn es sich als eines erweist) stößt man eben in der STL dauernd.</p>
</blockquote>
<p>Ja aber in der Prakis wird ja nur basic_ostream&lt;char, char_traits&lt;char&gt; &gt; und basic_istream&lt;char, char_traits&lt;char&gt; &gt; verwendet und meist auch noch durch explicite Instancirung in einer Library. Das ist ja etwas anderes als std::sort wo die Parameter die ganze Zeit wechseln.</p>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Benutzt keiner Exceptions bei I/O-Fehlern?</p>
</blockquote>
<p>Ich habe nur schlecht Erfahrungen mit ihnen gemacht und ich glaube den meißten wäre es auch zu affig jedesmal für jeden Strom die Ausnahmen einschalten zu müssen.</p>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Wenn du nur das EOF nicht so affig machst wie die iostreams, sind sie schon 10mal besser.</p>
</blockquote>
<p>Eigentlich finde ich folgendes recht einfach als Test:</p>
<pre><code class="language-cpp">if(in.peek() == EOF)
</code></pre>
<p>istream::eof ist affig, da gebe ich dir recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890872</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Wed, 12 Oct 2005 18:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:06:23 GMT]]></title><description><![CDATA[<p>ich denke an</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct hexer{
};
template&lt;&gt;
struct hexer&lt;unsigned int&gt;{
  unsigned int&amp; hexedVictim;
  hex(unsigned int&amp; hv):
  hexedVictim(hv){
  }
  friend ostream&amp; operator&lt;&lt;(ostream&amp; out,hex const&amp; h){
     unsigned int x=h.hexedVictim;
     do
        out&lt;&lt;&quot;0123456789abcdef&quot;[x%16];
     while(x/=16);
  }
};
template&lt;typename T&gt;
hexer&lt;T&gt; hex(T&amp; t){
   return hexer&lt;T&gt;(t);
}
</code></pre>
<p>also sehr direkte handles auf die zu hexenden daten. und sachen, die nicht gehext werden können, müssen halt compilerfehler liefern. also hex war keine funktion, die etwa einen string zurücklifert, auch wenn es den anschein hat, wenn man den vorugen code so liest.</p>
<p>Ben04 schrieb:</p>
<blockquote>
<p>Um einen Puffer der die gelesenen Zeichen enthält bis, dass es sicher ist, dass die Eingabe korrekt oder falsch ist kommt man nicht umher.</p>
</blockquote>
<p>man muß aber darum umher kommen. immerhin kann das gerade zu lesende objekt ein sound-sample von 30M länge sein.</p>
<p>können die dateiformate nicht so sein, daß man weiß, was für ein typ danach kommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890884</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:16:42 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>Ein Foo anzulegen könnte kostspielig sein und nur um zu testen ob das nächste was der Stream enthält ein Foo ist eines anlegen zu müssen klingt verschwenderisch. Was sich auch als sehr nützlich erwiesen hat war ein was_at.</p>
</blockquote>
<p>ich hab allerbeste erfahrungen mit</p>
<pre><code class="language-cpp">Foo::Foo(istream&amp; in)
:Base1(in),
Base2(in),
member1(in),
member2(in)
{
}
</code></pre>
<p>es ist einfach nur <strong>schweineschnell</strong>. und einfach. und mir ausreichend wartbar. und die factory liest einfach immer die klassenkenzeichnung vor dem objekt und ruft den entsprechenden new auf. die virtual void writeAt schreibt vor die nutzdaten die klassenkennzeichnung. da kann xml mal ganz schön nach hause gehen. um's dem menschen noch ein wenig netter in den files zu machen, hab ich noch nach der klassenkenzeichnung &quot;{\n&quot; und nach den nutzdaten &quot;}\n\n&quot; geschrieben. geschrieben wurde ascii und zahlen hex (für speed). menschen können zwar drin rumändern, aber perl-scrips machen das noch besser.</p>
<blockquote>
<p>Eigentlich finde ich folgendes recht einfach als Test:</p>
<pre><code class="language-cpp">if(in.peek() == EOF)
</code></pre>
<p>istream::eof ist affig, da gebe ich dir recht.</p>
</blockquote>
<p>äh. peek() liefert nen char, alles ander wäre unfug, oder? da passt EOF nicht rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890890</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:37:59 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ben04 schrieb:</p>
<blockquote>
<p>Ein Foo anzulegen könnte kostspielig sein und nur um zu testen ob das nächste was der Stream enthält ein Foo ist eines anlegen zu müssen klingt verschwenderisch. Was sich auch als sehr nützlich erwiesen hat war ein was_at.</p>
</blockquote>
<p>ich hab allerbeste erfahrungen mit</p>
<pre><code class="language-cpp">Foo::Foo(istream&amp; in)
:Base1(in),
Base2(in),
member1(in),
member2(in)
{
}
</code></pre>
<p>es ist einfach nur <strong>schweineschnell</strong>. und einfach. und mir ausreichend wartbar. und die factory liest einfach immer die klassenkenzeichnung vor dem objekt und ruft den entsprechenden new auf. die virtual void writeAt schreibt vor die nutzdaten die klassenkennzeichnung. da kann xml mal ganz schön nach hause gehen. um's dem menschen noch ein wenig netter in den files zu machen, hab ich noch nach der klassenkenzeichnung &quot;{\n&quot; und nach den nutzdaten &quot;}\n\n&quot; geschrieben. geschrieben wurde ascii und zahlen hex (für speed). menschen können zwar drin rumändern, aber perl-scrips machen das noch besser.</p>
</blockquote>
<p>Klar ist das schweine schnelaber nur bedingt vom Menschen lesbar. So wie ich es sehe kommt ein Container nicht umher die Zahl der Elemente als erstes abzuspeichern (oder irre ich da?). Der User sieht dann 3 {1 5 6} fügt mal schnell ein Element hinzu und du hast 3 {1 5 6 7} und das wäre ein Problem. XML ist ja nicht so sehr für Schnelligkeit ausgelegt, eher für leichte Veränderbarkeit vom Menschen mit Notpad. Meiner Meinung nach vergleichst du 2 verschiedene Paar Schuhe.</p>
<p>volkard schrieb:</p>
<blockquote>
<blockquote>
<p>Eigentlich finde ich folgendes recht einfach als Test:</p>
<pre><code class="language-cpp">if(in.peek() == EOF)
</code></pre>
<p>istream::eof ist affig, da gebe ich dir recht.</p>
</blockquote>
<p>äh. peek() liefert nen char, alles ander wäre unfug, oder? da passt EOF nicht rein.</p>
</blockquote>
<p>peek() liefert aus genau diesem Grund ein int zurück.<br />
<a href="http://www.cppreference.com/cppio/peek.html" rel="nofollow">http://www.cppreference.com/cppio/peek.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/890899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890899</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:47:20 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wie gefallen euch eigentlich die boost::iostreams?</p>
<p><a href="http://www.boost.org/libs/iostreams/doc/index.html" rel="nofollow">http://www.boost.org/libs/iostreams/doc/index.html</a></p>
<p>Mein erster Eindruck ist durchaus positiv (Filtering-Streams z.B. fand ich schon immer sehr nützlich). Hab' mich aber noch nicht intensiv genug damit beschäftigt um die Streams wirklich beurteilen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890902</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:54:02 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>So wie ich es sehe kommt ein Container nicht umher die Zahl der Elemente als erstes abzuspeichern (oder irre ich da?). Der User sieht dann 3 {1 5 6} fügt mal schnell ein Element hinzu und du hast 3 {1 5 6 7} und das wäre ein Problem.</p>
</blockquote>
<p>jup.<br />
deswegen hatte ich da gemogelt und {1 5 6 7} nur gemacht und es war noch ok, weil containers selten sind. schlimm sind natürlich strings ohne die längenangabe am anfang.<br />
ich dachte an zwei sorten streams, plainstreams und binarystreams, normalerweise werden binarystreams verwendet, aber der user kann jederzeit die welt auch auf nen plainstream speichern oder von da laden. naja, als zukonftsvision. war so aber auch schon ok und ich hab statt 10 min (konkurrenz) nur 20 sec gebraucht für 30M strukturierte daten. hab das projekt aber nicht fortgeführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890907</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 19:56:10 GMT]]></title><description><![CDATA[<p>elise schrieb:</p>
<blockquote>
<p>warum nicht?<br />
printf zum bleistift.<br />
und wozu braucht es die string klasse *g*</p>
</blockquote>
<p>Hm, string meide ich irgendwie und bastel immer spezialisierte Alternativen (die wahrscheinlich viel schlechter sind, aber egal <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="😉"
    /> ). Ich denke die Stream-Klassen braucht man, sonst modelliert man sich seine Container eben selbst <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/890910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890910</guid><dc:creator><![CDATA[BloodLord]]></dc:creator><pubDate>Wed, 12 Oct 2005 19:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 20:11:22 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Hallo,<br />
wie gefallen euch eigentlich die boost::iostreams?</p>
<p><a href="http://www.boost.org/libs/iostreams/doc/index.html" rel="nofollow">http://www.boost.org/libs/iostreams/doc/index.html</a></p>
<p>Mein erster Eindruck ist durchaus positiv (Filtering-Streams z.B. fand ich schon immer sehr nützlich). Hab' mich aber noch nicht intensiv genug damit beschäftigt um die Streams wirklich beurteilen zu können.</p>
</blockquote>
<p>Sieht cool aus. So ein bzip2- oder Regex-Filter kann schon praktisch sein und es ist schön, solche feinen Dinge in einer zusammenhängenden Bibliothek vorzufinden. Aus boost ist ganz schön was geworden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890918</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 12 Oct 2005 20:11:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 20:21:23 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ich dachte an zwei sorten streams, plainstreams und binarystreams, normalerweise werden binarystreams verwendet, aber der user kann jederzeit die welt auch auf nen plainstream speichern oder von da laden. naja, als zukonftsvision. war so aber auch schon ok und ich hab statt 10 min (konkurrenz) nur 20 sec gebraucht für 30M strukturierte daten. hab das projekt aber nicht fortgeführt.</p>
</blockquote>
<p>Du hast aber dafür die Eigenschaft geopfert, dass die Daten ohne weiteres vom Menschen lesbar sind. Die Idee 2 austauschbare Streamsorten zu benutzen hatte ich auch schon hab sie aber verworfen da beispielsweise XML nict bloß anders formatiert ist, sondern auch noch Metadaten benötigt.</p>
<pre><code>&lt;a&gt;
  &lt;b&gt;8&lt;/b&gt;
  &lt;c&gt;12&lt;/c&gt;
&lt;/a&gt;
</code></pre>
<p>Eigentlich nur mit Metadaten sinnvoll.</p>
<pre><code>&lt;Geburtstag&gt;
  &lt;Tag&gt;8&lt;/Tag&gt;
  &lt;Monat&gt;12&lt;/Monat&gt;
&lt;/Geburtstag&gt;
</code></pre>
<p>Zum generiren von XML braucht es also mehr Informationen als für binäre Representationen. Dann gibt es noch ein weiters Problem dies wäre auch gültiges XML</p>
<pre><code>&lt;Geburtstag&gt;
  &lt;Monat&gt;12&lt;/Monat&gt;
  &lt;Tag&gt;8&lt;/Tag&gt;
&lt;/Geburtstag&gt;
</code></pre>
<p>Dies würde aber Probleme bereiten da die binären Streams mit Hilfe der Reihenfolge die Daten deuten.</p>
<p>Meiner Meinung nach kann man nur die Zeichenquelle und Ausgabe teilen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/110">@HumeSikkins</a> Ich finde, dass es die IOStreams um sehr nützliche Funktionen erweitert. Diese auch gut umsetzt aber leider die alten Probleme nicht löst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890920</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Wed, 12 Oct 2005 20:21:23 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Wed, 12 Oct 2005 20:36:24 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>Die Idee 2 austauschbare Streamsorten zu benutzen hatte ich auch schon hab sie aber verworfen da beispielsweise XML nict bloß anders formatiert ist, sondern auch noch Metadaten benötigt.</p>
<pre><code>&lt;a&gt;
  &lt;b&gt;8&lt;/b&gt;
  &lt;c&gt;12&lt;/c&gt;
&lt;/a&gt;
</code></pre>
<p>Eigentlich nur mit Metadaten sinnvoll.</p>
<pre><code>&lt;Geburtstag&gt;
  &lt;Tag&gt;8&lt;/Tag&gt;
  &lt;Monat&gt;12&lt;/Monat&gt;
&lt;/Geburtstag&gt;
</code></pre>
</blockquote>
<p>äh. es kann doch ein (mit RVO natürlich) :tag(readAttrib(in,&quot;Tag&quot;)) sein. im binary-mode zu nollkosten weg und im normalemode auch nd im xml-mode wird halt lästig gehanselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890924</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 20:36:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Thu, 13 Oct 2005 14:24:48 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>äh. es kann doch ein (mit RVO natürlich) :tag(readAttrib(in,&quot;Tag&quot;)) sein. im binary-mode zu nollkosten weg und im normalemode auch nd im xml-mode wird halt lästig gehanselt.</p>
</blockquote>
<p>Das würde natürlich gehen aber wieviel Informationen braucht man? Diese Frage kann man beantworten wenn man sich auf einige Formate beschränkt. Man kann aber keine allgemein gültige Antwort finden wie sie für ein System das für Ausweitbarkeit ausgelegt ist gebraucht werden würde.</p>
<p>Desweiteren bin ich mir sicher, dass es in sehr vielen Fällen der Programmirer von vorn herein weiß welches Format er braucht. Zum Beispiel macht es keinen Sinn 30MB mit XML auf 100MB aufzupumpen allerdings wäre es auch keine gute Idee eine Konfigurationsdatei im binär Format zu schreiben. Ich glaube, dass es sehr viel Überzeugungsarbeit braucht um den Programmirer dazu zu bewegen da etwas sinnvolles hinzu schreiben wenn er genau weiß, dass er es nicht brauchen wird. Die Idee ist natürlich gut wenn man wirklich eine Duallösung braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891454</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Thu, 13 Oct 2005 14:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Thu, 13 Oct 2005 16:08:45 GMT]]></title><description><![CDATA[<p>Ich finde das eigentlich relativ klar. Wenn ich einigermaßen in Echtzeit Objekte über ein Socket wo hin schicken möchte, werde ich eine binäre Repräsentation nehmen. Von Menschen nicht lesbar, effizient und ein bisschen unportabel. Sachen wie eine Konfiguration sollten als XML geschrieben werden. Aus</p>
<pre><code class="language-cpp">class Configuration {
public:
    string getName();
    void setName(string);
    ...
};
</code></pre>
<p>Muss dann automatisch sowas wie</p>
<pre><code>&lt;Configuration&gt;
    &lt;name&gt;Hanswurst&lt;/name&gt;
&lt;/Configuration&gt;
</code></pre>
<p>werden.<br />
Wenn ich es mega-portabel und unabhängig brauche, muss ein Serializer her, der sich an ein offenes Format wie SOAP (XML mit wahnsinnig viel Zusatzinformationen erzeugt, die ich noch nicht verstanden habe) hält.<br />
Es gibt kein besser oder schlechter, man wird doch immer klare Anforderungen an die Objektserialisierung haben und am besten, man hat für alles entsprechende Filter-Streams.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891529</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 13 Oct 2005 16:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Thu, 13 Oct 2005 17:19:16 GMT]]></title><description><![CDATA[<p>warum gleich xml?</p>
<pre><code>&lt;Configuration&gt;
    &lt;name&gt;Hanswurst&lt;/name&gt;
&lt;/Configuration&gt;
</code></pre>
<p>naja, ich schreib und editiere leiber</p>
<pre><code>Configuration
{
    name: &quot;Hanswurst&quot;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/891607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891607</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 Oct 2005 17:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to C++ ohne STL? on Thu, 13 Oct 2005 19:33:34 GMT]]></title><description><![CDATA[<p>warum gleich xml?</p>
<pre><code>&lt;Configuration&gt;
&lt;name&gt;Hanswurst&lt;/name&gt;
&lt;/Configuration&gt;
</code></pre>
<p>naja, ich schreib und editiere leiber</p>
<pre><code>Configuration
{
    name: &quot;Hanswurst&quot;
}
</code></pre>
<p>Mein Kollege Klaus schreibt und ediert gerne:</p>
<pre><code>configuration
begin
  name := 'Hanswurst'
end
</code></pre>
<p>Wozu braucht man schon Standards, wenn doch jeder sein eigenes Süppchen kochen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891735</guid><dc:creator><![CDATA[kopf_schuettler]]></dc:creator><pubDate>Thu, 13 Oct 2005 19:33:34 GMT</pubDate></item></channel></rss>