Natürlich zunächst mal beschränkt auf die Funktionen, die wir tatsächlich benötigen - später evtl als eigenes Projekt ausgliedern.
Vorschlag Codename: lwgui - lightweight graphical user interface
Richtlinien (und somit auch die Gründe, warum keine bestehende genommen wird)
Light-Weight: Die Library definiert keine eigenen Zeichenroutinen und Grafiken, sondern leitet zum "OS" weiter (GTK, KDE, Mac-Cocoa, Windows...)
Moderne Codingstandards:
KEINE Makros. Zero.
Fehler werden immer über Exceptions weitergegeben, niemals über return-codes.
Benutze so viel standard library wie möglich, erfinde nicht zuviele Räder neu, erst recht nicht wenn sie wunderbar laufen und auf allen halbwegs aktuellen Platformen verfügbar sind... (denke an Vector, Array, String, Map, List...)
Templates sind was tolles
Niemals plain Pointer. Alles ist in einem unique_ptr, shared_ptr oder weak_ptr eingebaut - oder (bei Funktionsparametern sinnvoll) eine Referenz.
Versuche generell, so wenig Pointer wie möglich zu verwenden - i.A. sind Pointer ein Zeichen, dass Move-Semantik benötigt wird, oder Referenz-Semantik.
C++11 Funktionen wie auto, range-for, Move-Constructors etc. sind da, um benutzt zu werden.
Seit C++11 gibt es einen Plattformübergreifenden Threading-Standard, nutzen!
WENN überhaupt casts, dann C++-Casts wie dynamic_cast, static_cast etc. nicht (plaincast*)
Wenn Boost eine Lösung für ein Problem hat, Boost-Libraries nutzen!
Jede Funktion läuft auf jeder Plattform, oder wird nicht aufgenommen.
Sourcecode, der die Library benutzt, muss unverändert auf jeder Plattform compilieren und funktionieren, und zwar ohne Tricks wie #ifdef PLATTFORM1 #elsifdef PLATTFORM2 #endif etc. - derartige Sachen sind Implementierungsdetail und nicht Interface!
Library muss klein genug sein, um statisch gelinkt werden zu können
alle noch supporteten Linux/Ubuntu Versionen (10.04 LTS und höher)
Speziell 10.04 wird lustig, weil da noch ein recht alter GCC und somit eine recht alte libstdc++ drin ist. Eventuell kommt man ja weiter, wenn man die aktuelle statisch reinlinkt...
Debian squeeze, Gnome2 installiert
Debian wheezy, Gnome3 installiert
MacOS X, falls uns irgendjemand einen sponsert...
Windows XP ohne ServicePacks (wahrscheinlich brauchen wir sowieso lediglich die Win95-Untermenge der Systemfunktionen...)
Natürlich zunächst mal beschränkt auf die Funktionen, die wir tatsächlich benötigen - später evtl als eigenes Projekt ausgliedern.
Vorschlag Codename: lwgui - lightweight graphical user interface
Richtlinien (und somit auch die Gründe, warum keine bestehende genommen wird)