This is a collection of C++-libraries that I have taken a look into and found to be very pleasureable to use. Unklike other library-listings, this one is redacted to only list libraries that use modern C++ and encourage its users to use modern C++. (This is by the way the reason why Qt will never appear in this list.) It is very interessting to note here, that many of the libraries do in fact work with C++98, disprooving excuses that C++11 is needed to write great C++. (Though you should totally use C++14 at this point!)
While I took at least a very short look into the implementation of most (but not all) of the listed libraries and never came across things that made my eyes bleed , I decline to comment on the quality of the implementation. Bad implementations of good APIs can be improved, the reverse rarely ever happens!
In order to be listed, a library must be available under a free license as defined by the FSF.
A library that does not follow the stdlib naming-conventions may still be listed if it is otherwise very well designed and if there is no better alternative (this is why gtkmm is listed), but since it forces it’s users to mix random naming-conventions in their code, thereby creating a huge mess, this can easily become a deciding factor for libraries that are edge-cases.
Libraries for normal work
libpqxx
- http://pqxx.org/development/libpqxx/
- pqxx is a library to work with postgres.
- License: BSD
- C++-standard: C++98
- It follows the standard-library naming-conventions
- Everything it provides is in the
pqxx
-Namespace
- libpqxx is provided by the official Debian-repositories as
libpqxx-dev
png++
- http://www.nongnu.org/pngpp/
- png++ is a C++-wrapper for libpng
- License: BSD
- C++-standard: C++98
- It follows the standard-library naming-conventions
- Everything it provides is in the
png
-Namespace
- libpng++ is provided by the official Debian-repositories as
libpng++-dev
procxx
- https://github.com/skystrife/procxx
- procxx is a single-header library to start other processes, and communicate with them
- License: MIT
- C++-standard: C++11
- It follows the standard-library naming-conventions
- Everything it provides is in the
procxx
-Namespace
NLohmann-JSON
- https://github.com/nlohmann/json
- A modern single-header library for reading and writing JSON
- License: MIT
- C++-standard: C++11
- It follows the standard-library naming-conventions
- Basically everything it provides is in the
nlohmann
-Namespace, though only nlohmann::json
is really needed
Gtkmm
- http://www.gtkmm.org/en/
- A C++-wrapper around Gtk+ and related C-libraries
- License: LGPL
- C++-standard: C++98
- The naming-conventions are not standard-conforming
- Different parts may be in the
Gtk
-, Glib
-, Gio
- or the sigc
-namespace
- Gtkmm is provided by the official Debian-repositories as
libgtkmm-3.0-dev
and libgtkmm-3.0-dev
Frameworks
CppCMS
- http://cppcms.com/wikipp/en/page/main
- A Webframework for C++
- License: LGPL
- C++-standard: C++98
- It follows the standard-library naming-conventions
- Everything it provides is in the
cppcms
-Namespace
- The developers provide their own repositories for cppcms.
Experimental Libraries
These libraries do not follow current C++-conventions, but are an attempt to change those. They may be unusual but have great strengths in some areas.
Range-V3
- https://github.com/ericniebler/range-v3
- A C++11-implementation of what will be the Ranges-TS.
- License: Boost License
- C++-standard: C++11
- It follows the standard-library naming-conventions
- Everything it provides is in subnamespaces of
ranges
Unit-Testing-Frameworks
Since unit-testing-frameworks have completely different needs than other libraries, they run in their own competition. Since you usually only use macros from them, their naming-conventions are also much less important.
Catch
- https://github.com/philsquared/Catch/
- Standalone, single-header testing-framework that provides rich functionality and easy to use assertions
- License: Boost License
- C++-standard: C++98
- Macros are in
ALL_CAPS
, optionally prefixed with CATCH_
. Other than that the naming-conventions are not standard-conforming.
- Non-macros are in the
Catch
-namespace
- Catch is provided by the official Debian-repositories as
catch
Boost-Test
- http://www.boost.org/doc/libs/1_60_0/libs/test/doc/html/index.html
- Boosts answer to unit-testing
- License: Boost License
- C++-standard: C++98
- It follows the standard-library naming-conventions
- Everything it provides is in the
boost
-Namespace (macros: BOOST_
)
- boost-test is provided by the official Debian-repositories as
libboost-test-dev