C++ is a general-purpose systems programming language that is now more than 40 years old, having been designed in 1979. Far from losing steam, C++ still ranks near the top of multiple programming language popularity indexes.
Smoothing the path to C++ usage is broad support for the language among the makers of IDEs, editors, compilers, test frameworks, code quality, and other tools. Software developers also have at their disposal many excellent libraries to assist with building C++ applications. Here are 5 that C++ developers rely on.
Active Template Library
From Microsoft, Active Template Library (ATL) is a set of C++ classes for building COM (Common Object Model) objects, with support for COM features such as dual interfaces, standard COM enumerator interfaces, connection points, and ActiveX controls. Available with the Visual Studio IDE, ATL can be used to build single-threaded objects, apartment-model objects, free-threaded model objects, or both free-threaded and apartment-model objects.
Asio C++ library
The Asio C++ library is used for network and low-level I/O programming, offering a consistent asynchronous model. Providing basic building blocks for concurrency, C++ networking, and other types of I/O, Asio has been used in applications ranging from smartphone apps and games to highly interactive websites and real-time transaction systems. Projects using Asio include the WebSocketPP library and the DDT3 remote debugger for the Lua language. Asio is available as free open source under the Boost Software License, and supported on Linux, Windows, MacOS, and FreeBSD.
Cinder is an open source library for “creative coding” in C++. Useful for applications such as audio, computational geometry, graphics, and video, Cinder supports platform-native windowing and event-handling, along with I/O abstraction, and has a built-in API for XML and JSON parsing. Designed around idiomatic C++ 11 features such as shared_ptr, the library ships with numerous samples. Cinder supports MacOS, iOS, Linux, Windows, and Windows UWP.
Eigen is a C++ template library for linear algebra, including matrices, vectors, numerical solvers, and related algorithms. All matrix sizes are supported, from small, fixed matrices to arbitrarily large, dense matrices. Algorithms are selected for reliability. All standard numeric types are supported. For speed, Eigen features expression templates to intelligently remove temporaries and enable lazy evaluation. Freely available under the Mozilla Public License 2 and downloadable from the Eigen project page, Eigen has been fitted with an API described by proponents as expressive and clean and natural to C++ programmers. The test suite for Eigen has been run against many compilers to ensure reliability.
FloatX, or Float eXtended, is a header-only library for low-precision, floating point type emulation. While natively compatible with C++ compilers, FloatX can be called by other languages such as Python or Fortran. Floating point types are extended beyond the native single and double precision types. Template types are provided that allow the user to select the number of bits used for the exponent as well as significant parts of the floating point number. FloatX is based on the idea of the FlexFloat library for emulating reduced-precision floating types, but implements a superset of FlexFloat functionality in C and provides C++ wrappers. FloatX emerged from the Open Transprecision Computing initiative. It is available free under the Apache License 2.0.