Ich habe angefangen, einige früher geschriebene Klassen zusammen mit neuen OpenCL-Hilfsklassen in einer kleinen Bibliothek zu sammeln. Diese Hilfsklassen sollen die Arbeit mit C++ in objektorientierter Art und Weise angenehmer machen. Enthalten ist z.B. eine Java-ähnliche String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw. Die Bibliothek kommt mit Beispielen und hoffentlich ausführlichen API-Dokumentation. http://sourceforge.net/projects/rudiscpplib/
Hier ein paar Dinge, die mir beim Überfliegen aufgefallen sind: - CMakeCache.txt weglassen, sonst gibt's Fehler beim cmake-Aufruf - Es kommt nicht mit srcdir!=builddir klar. - In Headern bitte kein "using namespace std;"! - Dein toUpperCase() funktioniert nicht mit z.B. scharfem s. - Die Exceptions, die du wirfst, haben keine saubere Klassenhierarchie
Rüdiger Knörig schrieb: > Enthalten ist z.B. eine Java-ähnliche > String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw. So wie die bereits in C++ enthaltenen Klassen für Strings ( http://en.cppreference.com/w/cpp/string ) und für reguläre Ausdrücke ( http://en.cppreference.com/w/cpp/regex )?
Wie sein letzter Artikel in der IX: http://www.heise.de/ix/inhalt/2013/07/138/ Man beachte die Kommentare: http://www.heise.de/ix/foren/S-Seite-an-Seite/forum-258839/list/ Vielleicht kommt das von den Experimenten, die die CIA damals mit ihm gemacht hat, und von was für komischen Verschwörungen er sonst so berichtete...
Ah Danke - daß mit der CMakeCache.txt war ein heißer Tip! Auch die Einbindung des std-Namensbereichs in die Header habe ich bisher nicht bedacht. Hinsichtlich der toUpper-Funktionalität: gibt es in der C-Standardbibliothek noch eine Funktion ähnlich wie toupper, welche mit Sonderzeichen besser klar kommt? Was würden Sie sich hinsichtlich der Ausnahmen wünschen? Ich wollte nach Möglichkeit keine eigenen Ausnahmen hinzufügen und eher im Rahmen von stdexcept bleiben. Vielen Dank für die Rückmeldungen!
Dr. Sommer schrieb: > Rüdiger Knörig schrieb: >> Enthalten ist z.B. eine Java-ähnliche >> String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw. > So wie die bereits in C++ enthaltenen Klassen für Strings ( > http://en.cppreference.com/w/cpp/string ) und für reguläre Ausdrücke ( > http://en.cppreference.com/w/cpp/regex )? Die std::string-Klasse ist gerade im Vergleich mit der Java-String-Klasse sehr unkomfortabel - deshalb habe ich String ja gerade als Erweiterung von string geschrieben, um ständig wiederkehrende Aufgaben wie Typumwandlungen mit konkreter Fehlerbenachrichtigung durch Ausnahmen (also nicht wie durch ios::exception) abzudecken. Mit solchen Sachen vertut man zuviel Zeit. Was die regulären Klassen angeht - bis dato funktionierten die regulären Ausdrucksklassen von C++11 beim g++-Compiler schlichtweg kaum, und ich persönlich fand die Umsetzung in der boost-Bibliothek schlichtweg zumindest äußerst unsauber dokumentiert. Die Beispiele dort sind nicht gerade einstiegsfreundlich. Da ich aber für die geplanten Erweiterungen auf reguläre Ausdrücke angewiesen bin, habe ich eine eigene, von der Funktionalität dafür ausreichende Klasse geschrieben. @Olga: Na, na, nicht so neidisch! :-) In den eMail-Zusendungen habe ich viel Zustimmung erfahren. Und wenn ich mir die Kritiken so anschaue, dann kann ich ganz gut damit leben. Ein paar Qt-Hasser waren zu erwarten, die künstlich hochdramatisierte Unterscheidung zwischen Prozeß und Leichtgewichtsprozeß verweise ich auf die Usenet-Flamewars, als der Linux-ps-Befehl erstmals auch Threads mit anzeigte und daß man vorher unter C++ mit Threads arbeiten konnte stimmt auch nicht ganz. Die Posix-Schnittstelle war eine klassische C-Schnittstelle, und wie der Rezensent auch richtig bemerkte, ist eine wirklich objektorientierte Programmierung nun erst mit dem C++11-Standard ermöglicht worden. Die breite Verwendung von prozeduralen Schnittstellen wie Posix-Threads haben den Ruf von C++ meines Erachtens auch nicht ganz zu Unrecht geschadet, denn in vielen Fällen wurde auf eine objektorientierte Kapselung verzichtet. Hinzu kommt, daß man mit der POSIX-Schnittstelle nur äußerst neidisch auf die Möglichkeiten der Multithread-Programmierung unter Java blicken konnte.
Rüdiger Knörig schrieb: > Hinsichtlich der toUpper-Funktionalität: gibt es in der > C-Standardbibliothek noch eine Funktion ähnlich wie toupper, welche mit > Sonderzeichen besser klar kommt? Nein. Es gibt nur die toupper-Funktion, die aber nur mit einzelne Zeichen arbeitet. Für komplette Strings reicht es leider nicht, diese Funktion einfach für jedes Zeichen einmal aufzurufen. Es gibt (nicht nur in der deutschen Sprache) Sonderfälle, die so nicht behandelt werden können. Ein Klassiker ist da ß -> SS. Übrigens: Umgekehrt ist es sogar noch schwierieger bzw. für den Rechner kaum noch möglich, es immer richtig zu machen. Was ist das kleinbuchstabige Äquivalent zu "MASSE"? "masse" oder "maße"? > Was würden Sie sich hinsichtlich der Ausnahmen wünschen? Ich wollte nach > Möglichkeit keine eigenen Ausnahmen hinzufügen und eher im Rahmen von > stdexcept bleiben. Die Idee bei Exceptions ist (zumindest meiner Meinung nach) ja gerade, eine Hierarchie mit einer eigenen Klasse für jeden Fehlertyp zu haben, damit man in der Software leicht über entsprechende catch()-Handler zwischen verschiedenen Arten von Fehlern unterscheiden kann, wenn man das möchte. Wenn aber immer nur std::runtime_error geworfen und man nur aus dem übergebenen Fehlertext ermitteln kann, was genau schief gegangen ist, geht das nicht.
Das mit den Ausnahmen sehe ich ein. Bei den nächsten Änderungen werde ich dies umsetzen - der berechtigte Einwand hinsichtlich des std-Namensbereichs habe ich zumindestens in der Versionsverwaltung schon geändert. Bei der toUpper-Funktionalität muß ich mal sehen, wie sich das anpacken läßt - wahrscheinlich durch eine gesonderte Methode. Haben Sie vielen Dank für Ihre Anregungen!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.